Skip to content

stream

流是用于在 Node.js 中处理流数据的抽象接口。node:stream 模块提供了用于实现流接口的 API。

Node.js 提供了许多流对象。例如,向 HTTP 服务器请求 和 process.stdout

流可以是可读的、可写的、或两者兼而有之。所有的流都是 EventEmitter 的实例

node:stream 模块对于创建新类型的流实例很有用。通常不需要使用 node:stream 模块来消费流。

流的类型

Node.js 中有四种基本的流类型:

  • Writable:可以写入数据的流(例如,fs.createWriteStream()
  • Readable:可以从中读取数据的流(例如,fs.createReadStream()
  • Duplex:Readable 和 Writable 的流(例如,net.Socket
  • Transform:可以对数据进行转换的流(例如,zlib.createGzip()

此外,此模块还包括实用函数 stream.pipeline()stream.finished()stream.Readable.from()stream.addAbortSignal()

流 Promise API

stream/promises API 为返回 Promise 对象(而不是使用回调)的流提供了一组替代的异步实用函数。API 可通过 require('node:stream/promises')require('node:stream').promises 访问。

stream.pipeline(source[, ...transforms], destination[, options])

stream.pipeline(streams[, options])

简单示例:

js
const { pipeline } = require('node:stream/promises');
const fs = require('node:fs');
const zlib = require('node:zlib');

async function run() {
  await pipeline(
    fs.createReadStream('archive.tar'),
    zlib.createGzip(),
    fs.createWriteStream('archive.tar.gz'),
  );
  console.log('Pipeline succeeded.');
}

run().catch(console.error);

Released under the MIT License.