ReadableByteStreamController
注意:此功能在 Web Workers 中可用。
ReadableByteStreamController 接口是 Streams API 的一部分,代表一个 可读字节流 的控制器。它允许控制带有底层字节源的 ReadableStream 的状态和内部队列,并在流的内部队列为空时,实现从底层源到消费者的零拷贝高效数据传输。
当向 ReadableStream() 构造函数 传递一个具有 type="bytes" 属性的 underlyingSource 对象作为参数时,会创建一个此控制器类型的实例。underlyingSource 对象还可以定义 start() 和 pull() 回调函数。这些函数将以控制器作为参数进行调用,用于设置底层源并在需要时请求数据。
底层源通过其 byobRequest 属性或 enqueue() 方法使用控制器向流提供数据。byobRequest 是一个 ReadableStreamBYOBRequest 对象,表示消费者正在请求将数据直接进行零拷贝传输到消费者。如果 byobRequest 存在,则必须使用它来复制数据(在这种情况下不要使用 enqueue())!如果底层源需要将数据传递给流,并且 byobRequest 为 null,则源可以调用 enqueue() 将数据添加到流的内部队列中。
请注意,byobRequest 仅在有读取器请求且流的内部队列为空的“BYOB 模式”下创建。“BYOB 模式”在通过 ReadableStreamBYOBReader(通常通过调用 ReadableStream.getReader() 并传入 { mode: 'byob' } 参数来构造)使用时启用。当使用默认读取器并在 ReadableStream() 构造函数 中指定了 autoAllocateChunkSize 时,也会启用“BYOB 模式”。
底层字节源还可以使用控制器在所有数据发送完毕后 close() 流,并使用 error() 报告底层源的错误。控制器中的 desiredSize 属性用于应用“背压”,告知底层源内部队列的大小(较小的值表示队列正在填满,提示底层源暂停或限制流入是可取的)。
请注意,尽管控制器主要由底层字节源使用,但没有任何理由不能将其存储并由系统的其他部分使用来信号化流。
构造函数
无。如果将具有 type="bytes" 属性的 underlyingSource 传递给 ReadableStream() 构造函数,则会自动创建 ReadableByteStreamController 实例。
实例属性
ReadableByteStreamController.byobRequest只读-
返回当前的 BYOB 拉取请求,如果没有待处理的请求则返回
null。 ReadableByteStreamController.desiredSize只读-
返回填充流内部队列所需的期望大小。
实例方法
ReadableByteStreamController.close()-
关闭关联的流。
ReadableByteStreamController.enqueue()-
将给定的数据块添加到关联的流中。
ReadableByteStreamController.error()-
导致与关联流的任何未来交互都发生错误。
示例
控制器由底层源用于传输或入队数据,以指示流没有更多数据(已关闭)或发生错误。它还用于使用 desiredSize 从“上游”向底层源发出期望数据速率的信号。
在 使用可读字节流 中的示例,特别是 创建可读套接字推送字节流,展示了这些情况的大部分。
规范
| 规范 |
|---|
| Streams # rbs-controller-class |
浏览器兼容性
加载中…