更新时间: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 字节到缓冲区中。
lockedboolean (只读)cancel()reader.cancel(reason?: string): Promise<string>;
参数:
reason (可选): string 类型,表示取消读取操作的原因。描述: 关闭流并结束读取操作。
返回值: 返回一个 Promise 对象,状态为 fulfilled 时包含取消原因字符串。
releaseLock()reader.releaseLock(): void;
描述: 取消与流的关联,并释放流的锁定。