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