ReadableStream 和 WritableStream。
Bun 也实现了
node:stream 模块,包含
Readable、
Writable 和
Duplex。
更多完整文档请参考 Node.js 文档。ReadableStream:
for await 语法逐块读取 ReadableStream 的内容。
直接 ReadableStream
Bun 实现了一个优化版本的 ReadableStream,避免了不必要的数据复制和队列管理逻辑。
在传统的 ReadableStream 中,数据块是被 入队 的。每个数据块都会被复制到一个队列中,直到流准备好发送更多数据时才会被读取。
ReadableStream 中,数据块会直接写入流中。不会有排队,也无需将数据块复制到内存中。controller 的 API 也做了相应更新,不使用 .enqueue(),而是调用 .write。
ReadableStream 时,所有数据的排队由目标端负责。流的消费者接收到的正是传递给 controller.write() 的数据,没有任何编码或修改。
异步生成器流
Bun 也支持将异步生成器函数作为Response 和 Request 的数据源。这是创建从异步源获取数据的 ReadableStream 的简便方式。
[Symbol.asyncIterator]。
yield 将返回直接的 ReadableStream 控制器。
Bun.ArrayBufferSink
Bun.ArrayBufferSink 类是一个用于构造未知大小 ArrayBuffer 的高速增量写入器。
Uint8Array 格式获取数据,可以向 start 方法传入 asUint8Array 选项。
.write() 方法支持字符串、类型化数组、ArrayBuffer 和 SharedArrayBuffer。
.end(),就无法再向 ArrayBufferSink 写入数据。然而,在流缓冲的场景下,通常需要持续写入数据并定期调用 .flush() 将内容(例如写入到一个 WritableStream)。为支持此需求,可在构造时传入 stream: true。
.flush() 方法返回缓冲数据(作为 ArrayBuffer,如果 asUint8Array: true 则返回 Uint8Array)并清空内部缓冲区。
如果需要手动设置内部缓冲区的大小(以字节为单位),请传入 highWaterMark:
参考
See Typescript Definitions