跳转到内容
搜索文档

ReadableStream BYOBReader

最后更新 查看 MarkdownAgent 设置

背景

BYOB 是 bring your own buffer 的缩写。ReadableStreamBYOBReader 允许读入开发者提供的 buffer,从而最小化拷贝。

ReadableStreamBYOBReader 实例在功能上与 ReadableStreamDefaultReader 相同,除了 read 方法。

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

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

方法

  • read(bufferArrayBufferView) : Promise<ReadableStreamBYOBReadResult>

    • 返回 promise,将下一个可用数据 chunk 读入传入的 buffer。
  • readAtLeast(minElements, bufferArrayBufferView) : Promise<ReadableStreamBYOBReadResult>

    • 返回 promise,将下一个可用数据 chunk 读入传入的 buffer。promise 在至少读取 minElements 个元素之前不会 resolve。元素大小由 bufferArrayBufferView 决定,例如 Uint32Array 每个元素 4 字节。但是,如果到达 stream 末尾或底层 stream 已关闭,返回的元素可能少于 minElements。具体来说:

      • 如果有 minElements 个或更多元素可用,promise resolve 为 { value: <buffer view sized to bytes read>, done: false }
      • 如果在读取一些数据后 stream 结束但元素少于 minElements,promise resolve 为部分数据:{ value: <buffer view sized to bytes actually read>, done: false }。下一次调用 readreadAtLeast 将返回 { value: undefined, done: true }
      • 如果 stream 在零字节可用时结束(即 stream 已在 EOF),promise resolve 为 { value: <zero-length view>, done: true }
      • 如果 stream 出错,promise reject。
      • minElements 必须至少为 1,且 minElements * elementSize 不得超过 bufferArrayBufferView 的字节长度,否则 promise 会因 TypeError 而 reject。对于 Uint8Array,元素大小为 1,因此 minElements 实际上相当于字节计数。

常见问题


相关资源

这篇文档对您有帮助吗?