Readable byte streams
ReadableByteStreamController はストリーム API のインターフェイスで、読み取り可能なバイトストリームコントローラーを表します。 これは、基礎となるバイトソースを持つ ReadableStream の状態と内部キューを制御し、ストリームの内部キューが空の場合に、基礎となるソースからコンシューマーへの効率的なゼロコピーデータ移譲を可能にします。
このコントローラ型のインスタンスは、 underlyingSource オブジェクトに type="bytes" プロパティを設定して ReadableStream() コンストラクターの引数として渡された場合に作成されます。 underlyingSource オブジェクトは start() および pull() コールバック関数を定義することもできます。 これらは、コントローラーを引数として呼び出され、 基盤となるソースを設定し、必要に応じてデータをリクエストします。
基盤となるソースは、コントローラーを使用して byobRequest プロパティまたは enqueue() メソッドでストリームにデータを供給します。 byobRequest は ReadableStreamBYOBRequest オブジェクトで、コンシューマーから直接コンシューマーにゼロコピーでデータを移譲するための待機リクエストを表します。 データが存在する場合は、byobRequest を使用してデータをコピーする必要があります(この場合は enqueue() を使用しないでください)。 基盤となるソースがストリームにデータを渡す必要があり、 byobRequest が null の場合、ソースは enqueue() を呼び出して、ストリーム内部のキューにデータを追加することができます。
byobRequest は、リーダーからのリクエストがあり、ストリームの内部キューが空の場合にのみ、「BYOB モード」で作成されることに注意してください。 「BYOB モード」は、 ReadableStreamBYOBReader (通常、 ReadableStream.getReader() を引数 { mode: 'byob' } で呼び出すことで構築されます)を使用している場合に有効になります。 既定値でリーダーを使用し、 autoAllocateChunkSize が ReadableController() コンストラクター で指定されている場合にも有効になります。
基盤となるバイトソースは、コントローラーを使用して、すべてのデータが送信されたときにストリームを閉じたり (close())、 error() を使用して基盤となるソースからエラーを報告したりすることもできます。 コントローラーの desiredSize プロパティを使用して「背圧」をかけ、基盤となるソースに内部キューのサイズを通知します(値が小さいと、キューがいっぱいになっていることを示し、基盤となるソースに流入を一時停止またはスロットルすることが望ましいことを示唆します)。
たとえコントローラーが主に基盤となるバイトソースによって使用されるとしても、ストリームの指示のためにシステムの他の部分によって格納することができない理由はないことに注意してください。
対応ブラウザ
| 機能 | デスクトップ | モバイル | ||||
|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Safari | Chrome Android | Safari iOS | |
| 89 | 89 | 102 | 26.4 | 89 | 26.4 | |
| byobRequest は ReadableByteStreamController インターフェイスの読み取り専用プロパティで、現在の BYOB リクエストを返します。保留中のリクエストがない場合は null を返します。 | 89 | 89 | 102 | 26.4 | 89 | 26.4 |
| close() は ReadableByteStreamController インターフェイスのメソッドで、関連するストリームを閉じます。 | 89 | 89 | 102 | 26.4 | 89 | 26.4 |
| desiredSize は ReadableByteStreamController インターフェイスの読み取り専用プロパティで、ストリームの内部キューを満たすために必要な「希望サイズ」を返します。 | 89 | 89 | 102 | 26.4 | 89 | 26.4 |
| enqueue() は ReadableByteStreamController で、指定されたチャンクを、関連する読み取り可能なバイトストリームのキューに入れます(チャンクはストリーム内部のキューにコピーされます)。 | 89 | 89 | 102 | 26.4 | 89 | 26.4 |
| error() は ReadableByteStreamController インターフェイスのメソッドで、関連するストリームとの今後のやり取りを、指定した理由でエラーとします。 | 89 | 89 | 102 | 26.4 | 89 | 26.4 |
| ReadableStreamBYOBReader はストリーム API のインターフェイスで、 ReadableStream 用のリーダーを定義します。このリーダーは、基盤となるバイトソースからのゼロコピー読み込みに対応しています。 ファイルなど、データがバイト列の「無名」シーケンスとして配信される基盤から効率的にコピーするために使用します。 | 89 | 89 | 102 | 26.4 | 89 | 26.4 |
| cancel() は ReadableStreamBYOBReader インターフェイスのメソッドで、ストリームがキャンセルされたときに解決するプロミス (Promise) を返します。 このメソッドを呼び出すと、コンシューマーがストリームへの関心を失ったことを示します。 | 89 | 89 | 102 | 26.4 | 89 | 26.4 |
| closed は ReadableStreamBYOBReader インターフェイスの読み取り専用プロパティで、ストリームが閉じられた場合、またはリーダーのロックが解除された場合に履行され、ストリームがエラーの場合は拒否されるプロミスを返します。 | 89 | 89 | 102 | 26.4 | 89 | 26.4 |
| read() は ReadableStreamBYOBReader インターフェイスのメソッドで、ユーザーが提供したバッファー上のビューに、関連付けられた読み取り可能なバイトストリームからデータを読み込むために使用します。 データに対するリクエストは、データを説明しているものがあれば、ストリームの内部キューから満たされます。 ストリームキューが空の場合、リクエストは、基盤のバイトソースからのゼロコピー移譲として供給されるかもしれません。 | 89 | 89 | 102 | 26.4 | 89 | 26.4 |
read (options min parameter) `options.min` パラメータ | 140 | 140 | 134 | | 140 | |
| ReadableStreamBYOBReader() コンストラクターは、ReadableStreamBYOBReader オブジェクトのインスタンスを作成して返します。 | 89 | 89 | 102 | 26.4 | 89 | 26.4 |
| releaseLock() は ReadableStreamBYOBReader インターフェイスのメソッドで、ストリーム上のリーダーのロックを解除します。 ロックを解除すると、リーダーはアクティブではなくなります。 | 89 | 89 | 102 | 26.4 | 89 | 26.4 |
releaseLock (reject pending read request) `releaseLock()` は保留中の読み取りリクエストを拒否します | 105 | 105 | 102 | | 105 | |
| ReadableStreamBYOBRequest はストリーム API のインターフェイスで、は、コンシューマーにゼロコピーで移譲される(ストリーム内部のキューをバイパスする)基盤からのデータの「プルリクエスト」を表します。 | 89 | 89 | 102 | 26.4 | 89 | 26.4 |
| respond() は ReadableStreamBYOBRequest インターフェイスのメソッドで、 ReadableStreamBYOBRequest.view に指定したバイト数が書き込まれたことを、関連する読み取り可能なバイトストリームに通知するために用いられます。 | 89 | 89 | 102 | 26.4 | 89 | 26.4 |
| respondWithNewView() は ReadableStreamBYOBRequest インターフェイスのメソッドで、 ReadableStreamBYOBRequest.view の代わりに、関連付けられた読み取り可能なバイトストリームの消費者が書き込むべき新しいビューを指定します。 | 89 | 89 | 102 | 26.4 | 89 | 26.4 |
| view は ReadableStreamBYOBRequest インターフェイスのゲッタープロパティで、現在のビューを返します。 | 89 | 89 | 102 | 26.4 | 89 | 26.4 |
- バージョン105以前では、`releaseLock()`はリジェクトされるのではなく、例外をスローします。
- バージョン105以前では、`releaseLock()`はリジェクトされるのではなく、例外をスローします。
- バージョン105以前では、`releaseLock()`はリジェクトされるのではなく、例外をスローします。
実務での使いどころ
-
Readable byte streams の活用
ReadableByteStreamController はストリーム API のインターフェイスで、読み取り可能なバイトストリームコントローラーを表します。
注意点
- 古いブラウザでは対応していない場合がある。
実装メモ
- 一部の API はセキュアコンテキスト (HTTPS) やユーザー操作起点を必要とする。利用前に要件を確認すること。