📅  最后修改于: 2023-12-03 15:33:10.501000             🧑  作者: Mango
Node.js 中有两种常见的读取文件的方式:使用 fs 模块的 readFile 和 createReadStream 方法。它们的使用场景有所不同,下面我们具体看一下它们的区别。
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
方法是将整个文件加载到内存中,然后再进行处理。所以,如果要读取的文件非常大时,它的内存占用会很高,也会导致读取性能下降。
与 readFile
方法不同的是,createReadStream
方法是一个基于流的读取文件方法,它能够高效地处理大文件。其用法如下:
const fs = require('fs');
fs.createReadStream(path[, options])
其中 path
和 options
的含义与 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
方法。