📜  Node.js 中 readFile 和 createReadStream 的区别(1)

📅  最后修改于: 2023-12-03 15:33:10.501000             🧑  作者: Mango

Node.js 中 readFile 和 createReadStream 的区别

Node.js 中有两种常见的读取文件的方式:使用 fs 模块的 readFile 和 createReadStream 方法。它们的使用场景有所不同,下面我们具体看一下它们的区别。

readFile

readFile 是 fs 模块中读取文件的基本方法,其用法如下:

const fs = require('fs');

fs.readFile(path[, options], callback)

其中 path 表示要读取的文件路径;options 是一个可选对象,用来指定读取选项,比如 encoding 表示读取时的编码方式;callback 是一个回调函数,读取完成后会被执行。

下面是一个使用 readFile 读取文件的例子:

const fs = require('fs');

fs.readFile('path/to/file', 'utf8', (err, data) => {
  if (err) throw err;
  console.log(data);
});

这段代码会将文件路径 path/to/file 中的内容读取出来,并打印到控制台上。需要注意的是,readFile 方法是将整个文件加载到内存中,然后再进行处理。所以,如果要读取的文件非常大时,它的内存占用会很高,也会导致读取性能下降。

createReadStream

readFile 方法不同的是,createReadStream 方法是一个基于流的读取文件方法,它能够高效地处理大文件。其用法如下:

const fs = require('fs');

fs.createReadStream(path[, options])

其中 pathoptions 的含义与 readFile 方法相同。一个使用 createReadStream 读取文件的例子如下:

const fs = require('fs');

const stream = fs.createReadStream('path/to/file', 'utf8');

stream.on('data', (chunk) => {
  console.log(chunk);
});

stream.on('end', () => {
  console.log('文件读取完毕');
});

这段代码实现了与 readFile 方法相同的功能,但是底层实现却完全不同。使用 createReadStream 方法时,数据会以一定的速度分块读取,并且会将每个分块以事件的形式通知调用方。这样,在处理大文件时,便能够有效减少内存的占用,并且也能够提高读取的性能。

总结

综合来看,当要读取的文件很小,或者需要一次性读取整个文件时,使用 readFile 方法即可;当要读取的文件较大时,或者需要基于流来处理文件时,就应该使用 createReadStream 方法。