NodeJS教程

流式读写文件

Preview
  • Node.js 流式读写文件
  • 可读流读取文件
  • 可写流写入文件
  • 可读可写流读写文件
  • 总结

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() 方法将可读流、可写流和双工流连接起来。