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 }。下一次调用read或readAtLeast将返回{ 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实际上相当于字节计数。
- 如果有
-