ReadableByteStreamController

可用性有限

此特性不是基线特性,因为它在一些最广泛使用的浏览器中不起作用。

注意:此功能在 Web Workers 中可用。

ReadableByteStreamController 接口是 Streams API 的一部分,代表一个 可读字节流 的控制器。它允许控制带有底层字节源的 ReadableStream 的状态和内部队列,并在流的内部队列为空时,实现从底层源到消费者的零拷贝高效数据传输。

当向 ReadableStream() 构造函数 传递一个具有 type="bytes" 属性的 underlyingSource 对象作为参数时,会创建一个此控制器类型的实例。underlyingSource 对象还可以定义 start()pull() 回调函数。这些函数将以控制器作为参数进行调用,用于设置底层源并在需要时请求数据。

底层源通过其 byobRequest 属性或 enqueue() 方法使用控制器向流提供数据。byobRequest 是一个 ReadableStreamBYOBRequest 对象,表示消费者正在请求将数据直接进行零拷贝传输到消费者。如果 byobRequest 存在,则必须使用它来复制数据(在这种情况下不要使用 enqueue())!如果底层源需要将数据传递给流,并且 byobRequestnull,则源可以调用 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

浏览器兼容性

另见