ReadableStreamBYOBReader

更新时间:2024-08-14 19:50:28

ReadableStreamBYOBReader 接口用于可读流操作,基于 Web APIs 标准 ReadableStreamBYOBReader 设计。BYOB(Bring Your Own Buffer)表示允许从流读取数据到用户提供的缓冲区,从而最大限度地减少数据复制,提高性能。

注意:

ReadableStreamBYOBReader 实例在功能上与 ReadableStreamDefaultReader 相同,区别在于 read 方法。

ReadableStreamBYOBReader 不是通过构造函数实例化的,而是从 ReadableStream 获取:

const { readable, writable } = new TransformStream();
const reader = readable.getReader({ mode: 'byob' });

方法

read(bufferArrayBufferView)

reader.read(bufferArrayBufferView: ArrayBufferView): Promise<ReadableStreamBYOBReadResult> 

参数:

  • bufferArrayBufferView: ArrayBufferView 类型,表示开发者提供的缓冲区视图,用于存储读取的数据。

返回值: 返回一个 Promise<ReadableStreamBYOBReadResult> 对象,其中包含将下一个可用数据块读取到传入缓冲区后的结果。

描述: 将流中的下一个可用数据块读取到传入的缓冲区中,并返回一个 Promise 对象。

注意:

read 方法无法控制应读取到缓冲区的最小字节数。即使分配了 1MB 的缓冲区,内核也可能只读取一个字节就完成读取操作,无论是否紧跟着文件结束符 (EOF)。

在实践中,我们发现 read 方法通常只填充提供缓冲区的 1%。

readAtLeast(minBytes, bufferArrayBufferView)

reader.readAtLeast(minBytes: number, bufferArrayBufferView: ArrayBufferView): Promise<ReadableStreamBYOBReadResult>

参数:

  • minBytes: number 类型,表示要读取的最小字节数。
  • bufferArrayBufferView : ArrayBufferView 类型,表示开发者提供的缓冲区视图,用于存储读取的数据。

返回值: 返回一个 Promise<ReadableStreamBYOBReadResult> 对象,其中包含将下一个可用数据块读取到传入缓冲区后的结果。

描述: 将流中的下一个可用数据块读取到传入的缓冲区中,并返回一个 Promise 对象。Promise 对象只有在读取了至少 minBytes 字节后才会解析。

readAtLeast 是对 Streams API 的非标准扩展,它允许用户指定在解析读取操作之前必须至少读取 minBytes 字节到缓冲区中。

属性

locked

  • 类型: boolean (只读)
  • 描述: 指示可读流是否已锁定到 reader。

方法

cancel()

reader.cancel(reason?: string): Promise<string>;

参数:

  • reason (可选): string 类型,表示取消读取操作的原因。

描述: 关闭流并结束读取操作。

返回值: 返回一个 Promise 对象,状态为 fulfilled 时包含取消原因字符串。

releaseLock()

reader.releaseLock(): void;

描述: 取消与流的关联,并释放流的锁定。

相关参考

本篇文档内容对您是否有帮助?
有帮助
我要反馈
提交成功!非常感谢您的反馈,我们会继续努力做到更好!