ReadableByteStreamController

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

Hinweis: Diese Funktion ist in Web Workers verfügbar.

Das ReadableByteStreamController-Interface der Streams-API stellt einen Controller für einen lesbaren Byte-Stream dar. Es ermöglicht die Kontrolle des Zustands und der internen Warteschlange eines ReadableStream mit einer zugrunde liegenden Bytequelle und ermöglicht einen effizienten Zero-Copy-Datentransfer von der zugrunde liegenden Quelle zu einem Verbraucher, wenn die interne Warteschlange des Streams leer ist.

Eine Instanz dieses Controller-Typs wird erstellt, wenn ein underlyingSource-Objekt mit der Eigenschaft type="bytes" als Argument an den ReadableStream()-Konstruktor übergeben wird. Das underlyingSource-Objekt kann auch die Callback-Funktionen start() und pull() definieren. Diese werden mit dem Controller als Parameter aufgerufen, um die zugrunde liegende Quelle einzurichten und bei Bedarf Daten anzufordern.

Die zugrunde liegende Quelle verwendet den Controller, um Daten über dessen byobRequest-Eigenschaft oder die Methode enqueue() an den Stream zu übermitteln. byobRequest ist ein ReadableStreamBYOBRequest-Objekt, das eine ausstehende Anfrage von einem Verbraucher darstellt, um einen Zero-Copy-Datentransfer direkt an einen Verbraucher durchzuführen. byobRequest muss verwendet werden, um Daten zu kopieren, falls es existiert (verwenden Sie in diesem Fall nicht enqueue())! Wenn die zugrunde liegende Quelle Daten an den Stream übergeben muss und byobRequest null ist, kann die Quelle enqueue() aufrufen, um die Daten zur internen Warteschlange des Streams hinzuzufügen.

Beachten Sie, dass byobRequest nur im "BYOB-Modus" erstellt wird, wenn eine Anfrage von einem Leser vorliegt und die interne Warteschlange des Streams leer ist. Der "BYOB-Modus" wird aktiviert, wenn ein ReadableStreamBYOBReader verwendet wird (typischerweise konstruiert durch den Aufruf von ReadableStream.getReader() mit dem Argument { mode: 'byob' }). Er wird auch aktiviert, wenn ein Standardleser verwendet wird und autoAllocateChunkSize im ReadableStream()-Konstruktor angegeben ist.

Eine zugrunde liegende Bytequelle kann auch den Controller verwenden, um den Stream mittels close() zu schließen, wenn alle Daten gesendet wurden, und um Fehler von der zugrunde liegenden Quelle mit error() zu melden. Die desiredSize-Eigenschaft des Controllers wird verwendet, um "Backpressure" anzuwenden, indem sie die zugrunde liegende Quelle über die Größe der internen Warteschlange informiert (kleine Werte deuten darauf hin, dass die Warteschlange sich füllt, was der zugrunde liegenden Quelle das Pausieren oder Drosseln des Zuflusses nahelegt).

Beachten Sie, dass der Controller zwar hauptsächlich von der zugrunde liegenden Bytequelle verwendet wird, aber es keinen Grund gibt, warum er nicht von anderen Teilen des Systems verwendet werden könnte, um dem Stream Signale zu geben.

Konstruktor

Keiner. ReadableByteStreamController-Instanzen werden automatisch erstellt, wenn ein underlyingSource mit der Eigenschaft type="bytes" an den ReadableStream()-Konstruktor übergeben wird.

Instanz-Eigenschaften

ReadableByteStreamController.byobRequest Schreibgeschützt

Gibt die aktuelle BYOB-Abfrage zurück oder null, wenn keine ausstehende Anfrage vorliegt.

ReadableByteStreamController.desiredSize Schreibgeschützt

Gibt die gewünschte Größe zurück, die erforderlich ist, um die interne Warteschlange des Streams zu füllen.

Instanz-Methoden

ReadableByteStreamController.close()

Schließt den zugehörigen Stream.

ReadableByteStreamController.enqueue()

Fügt einen gegebenen Chunk in die zugehörige Warteschlange des Streams ein.

ReadableByteStreamController.error()

Führt dazu, dass alle zukünftigen Interaktionen mit dem zugehörigen Stream fehlerhaft sind.

Beispiele

Der Controller wird von einer zugrunde liegenden Quelle verwendet, um Daten zu übertragen oder in die Warteschlange einzufügen, um zu signalisieren, dass der Stream keine Daten mehr hat (geschlossen ist) oder fehlerhaft ist. Er wird auch verwendet, um der zugrunde liegenden Quelle von "upstream" die gewünschte Datenrate mitzuteilen, indem desiredSize verwendet wird.

Das Beispiel in Verwendung von lesbaren Byte-Streams, insbesondere Erstellung eines lesbaren Socket-Push-Byte-Streams, zeigt die meisten dieser Fälle.

Spezifikationen

Specification
Streams
# rbs-controller-class

Browser-Kompatibilität

Siehe auch