Start · Sprachen · JavaScript · Referenz · ReadableByteStreamController

ReadableByteStreamController

Schnittstelle

Steuert einen <code>ReadableStream</code> vom Typ <code>"bytes"</code>: Daten einreihen, BYOB-Leseanfragen ohne Kopieren bedienen, den Strom schließen oder einen Fehler melden.

seit JavaScript Chrome/Edge 89+, Firefox 102+, Safari erst seit ne Kategorie: webapi

Signatur

interface ReadableByteStreamController

Beschreibung

ReadableByteStreamController übernimmt bei Byte-Strömen die Rolle, die ReadableStreamDefaultController bei normalen Strömen hat. Sie erzeugen ihn nie selbst. Der Browser legt ihn automatisch an, sobald Sie new ReadableStream({ type: "bytes", ... }) aufrufen, und übergibt ihn an die Methoden start(controller) und pull(controller) Ihrer zugrunde liegenden Quelle.

Der wichtigste Vorteil von Byte-Strömen ist das Lesen ohne Kopieren mit einem ReadableStreamBYOBReader („bring your own buffer“, also „eigenen Puffer mitbringen“). Der Leser stellt einen eigenen Puffer bereit, und die Quelle schreibt über controller.byobRequest direkt hinein. Das lohnt sich bei großen Binärdaten, etwa beim Zerlegen von Dateiformaten, bei Netzwerkprotokollen oder beim Arbeiten mit dem Speicher von WebAssembly.

Mitglieder des Interfaces:

  • byobRequest (nur lesbar): die aktuelle ReadableStreamBYOBRequest oder null. Sie füllen byobRequest.view und rufen danach respond(bytesWritten) auf. Alternativ übergeben Sie mit respondWithNewView(view) eine neue Ansicht auf denselben Puffer.
  • desiredSize (nur lesbar): Anzahl der Bytes, die noch in die interne Warteschlange passen, bevor der Gegendruck greift. Der Wert ist null nach einem Fehler und 0 nach dem Schließen. Er kann auch negativ sein.
  • enqueue(chunk): reiht eine ArrayBufferView (typisiertes Array oder DataView) ein. Dabei wird der zugehörige Puffer übertragen, das heißt, er ist danach für die Quelle nicht mehr nutzbar.
  • close(): schließt den Strom. Daten, die bereits in der Warteschlange liegen, können noch gelesen werden.
  • error(reason): versetzt den Strom in den Fehlerzustand. Alle Daten in der Warteschlange werden verworfen.

Wenn Sie in den Quelloptionen autoAllocateChunkSize setzen, legt der Strom auch für normale Leser (getReader() ohne mode) automatisch einen Puffer an. Dann ist byobRequest in pull() immer vorhanden, und die Quelle braucht nur einen einzigen Codepfad.

Parameter

Name Typ Default Beschreibung
$chunk Pflicht ArrayBufferView Parameter von enqueue(chunk): die Bytes, die eingereiht werden sollen, z. B. ein Uint8Array. Der Puffer darf nicht leer oder abgetrennt (detached) sein.
$e any undefined Parameter von error(e): der Fehlergrund, mit dem Lesevorgänge abgelehnt werden. Üblich ist ein Error-Objekt.

Rückgabewert

Typ
void
Beschreibung
enqueue(), close() und error() geben undefined zurück. byobRequest liefert ReadableStreamBYOBRequest | null, desiredSize liefert number | null.