如何使用 Node.js 读取非常大的文件?

如何使用 Node.js 读取非常大的文件?

如何用 Node.js 处理一个 2.55 Gb 的文件,并按要求提取,统计出需要的信息?

文章完整地址为: http://docs.breword.com/92hackers-translate-articles/use-nodejs-read-large-files?language=zh-CN

我使用 Breword 翻译工具快速翻译了这篇文章,为我节省很多时间,如果你也想翻译自己的文章,欢迎使用 Breword 翻译工具:www.breword.com , 以便提高翻译效率。


1 回复

在 Node.js 中读取非常大的文件时,直接一次性读入内存可能会导致内存溢出。因此,推荐使用流(Stream)来逐块读取文件。以下是使用 fs 模块中的流来读取大文件的示例代码:

const fs = require('fs');
const readline = require('readline');

// 创建读取流
const readStream = fs.createReadStream('path/to/large/file.txt', { encoding: 'utf8', highWaterMark: 64 * 1024 }); // 64KB 缓冲区

// 创建接口来逐行读取
const rl = readline.createInterface({
    input: readStream,
    crlfDelay: Infinity
});

rl.on('line', (line) => {
    // 在这里处理每一行数据
    console.log(`Received line: ${line}`);
});

rl.on('close', () => {
    console.log('File reading completed.');
});

rl.on('error', (err) => {
    console.error(`Error reading file: ${err.message}`);
});

解释:

  1. fs.createReadStream: 创建一个读取流,通过 highWaterMark 选项设置每次读取的字节数(这里设置为 64KB)。
  2. readline.createInterface: 创建一个接口来逐行读取流数据。
  3. rl.on(‘line’, callback): 当读取到一行数据时触发,可以在回调中处理每行数据。
  4. rl.on(‘close’, callback): 当文件读取完成时触发。
  5. rl.on(‘error’, callback): 当读取文件时发生错误时触发。

这种方法可以有效地处理大文件,因为它避免了将整个文件加载到内存中。

回到顶部