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

瀏覽器相容性

另見