面试题答案
一键面试何时优先选择结合使用
当处理大文件时,应该优先选择将 fs.readFile
与流(stream)结合使用。fs.readFile
会将整个文件读入内存,如果文件过大,可能导致内存溢出问题。而流可以逐块读取和处理数据,不会一次性占用大量内存,更适合处理大文件。
结合方式
- 使用
fs.createReadStream
创建可读流。 - 通过管道(
pipe
)将可读流的数据传输到目标,比如fs.createWriteStream
创建的可写流,进行数据处理或存储。
实际应用场景代码示例
假设要读取一个大文本文件并将其内容逐行写入另一个文件,示例代码如下:
const fs = require('fs');
const readableStream = fs.createReadStream('largeFile.txt', { encoding: 'utf8' });
const writableStream = fs.createWriteStream('newFile.txt');
readableStream.on('data', (chunk) => {
const lines = chunk.split('\n');
lines.forEach(line => {
if (line.trim()!== '') {
writableStream.write(line + '\n');
}
});
});
readableStream.on('end', () => {
writableStream.end();
});
相较于单纯使用 fs.readFile
的优势
- 内存占用少:流逐块处理数据,不会像
fs.readFile
那样将整个大文件一次性读入内存,避免内存溢出,提高程序稳定性。 - 性能提升:对于大文件,流的处理方式可以边读边写,无需等待整个文件读取完成才开始处理,提高了处理效率。 例如在上述示例中,如果使用
fs.readFile
,需要等待整个largeFile.txt
读取到内存后才能开始写入newFile.txt
,而使用流可以在读取到部分数据就开始写入操作。