Node.js 流式读写文件
在 Node.js 中,我们可以使用 fs 模块来读写文件。然而,如果要处理大型文件,同步和异步读写文件会导致内存问题。在这种情况下,流式读写文件是更好的选择。在本文中,我们将介绍如何使用流式读写文件。
可读流读取文件
在 Node.js 中,我们可以使用 fs.createReadStream()
方法创建一个可读流,用于读取文件。
const fs = require('fs');
const readable = fs.createReadStream('file.txt');
readable.on('data', (chunk) => {
console.log(chunk.toString());
});
在这个示例中,我们创建了一个可读流,并添加了一个 data 事件监听器。当有数据可用时,data 事件将被触发,并将读取的数据作为 Buffer 对象传递给回调函数。
可写流写入文件
在 Node.js 中,我们可以使用 fs.createWriteStream()
方法创建一个可写流,用于写入文件。
const fs = require('fs');
const writable = fs.createWriteStream('file.txt');
writable.write('hello');
writable.write('world');
在这个示例中,我们创建了一个可写流,并使用 write()
方法将字符串写入到流中。我们还可以使用 Buffer 对象将二进制数据写入到流中。
const fs = require('fs');
const writable = fs.createWriteStream('file.txt');
const buf = Buffer.from('hello');
writable.write(buf);
可读可写流读写文件
在 Node.js 中,我们可以使用 fs.createReadStream()
和 fs.createWriteStream()
方法创建可读可写流,用于读写文件。
const fs = require('fs');
const duplex = require('stream').Duplex;
const stream = new duplex({
read(size) {
const buf = Buffer.alloc(size);
this.push(buf);
},
write(chunk, encoding, callback) {
console.log(chunk.toString());
callback();
},
});
const readable = fs.createReadStream('file.txt');
const writable = fs.createWriteStream('file.txt');
readable.pipe(stream).pipe(writable);
在这个示例中,我们创建了一个可读可写流,并实现了 read()
和 write()
方法。read()
方法将创建一个指定大小的 Buffer 对象并将其推送到可读流中。write()
方法将读取写入的数据并将其打印到控制台上。我们还使用 pipe()
方法将可读流、可写流和双工流连接起来。
总结
在 Node.js 中,我们可以使用 fs 模块来读写文件。如果要处理大型文件,流式读写文件是更好的选择。可读流用于读取文件,可写流用于写入文件,可读可写流用于同时读写文件。我们可以使用 pipe()
方法将可读流、可写流和双工流连接起来。