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);