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 形式检索数据,请将 asUint8Array 选项传递给 start 方法。
.write() 方法支持字符串、类型化数组、ArrayBuffer 和 SharedArrayBuffer。
.end(),就不能再向 ArrayBufferSink 写入数据。然而,在缓冲流的上下文中,连续写入数据并定期 .flush() 内容(比如,写入 WriteableStream)是有用的。为了支持这一点,请在构造函数中传递 stream: true。
.flush() 方法将缓冲的数据作为 ArrayBuffer(或如果设置了 asUint8Array: true 则为 Uint8Array)返回并清除内部缓冲区。
要手动设置内部缓冲区的大小(以字节为单位),请为 highWaterMark 传递一个值:
参考
See Typescript Definitions