ReadableStreamBYOBRequest: respondWithNewView() メソッド
respondWithNewView()
は ReadableStreamBYOBRequest
インターフェイスのメソッドで、 ReadableStreamBYOBRequest.view
の代わりに、関連付けられた読み取り可能なバイトストリームの消費者が書き込むべき新しいビューを指定します。
新しいビューは TypedArray
または DataView
でなければならず、 ReadableStreamBYOBRequest.view
と同じバッキングメモリー領域にビューを提供します。
このメソッドが呼び出された後、メソッドに渡されたビューは移譲され、変更できなくなりました。
このメソッドは、バイト基盤がレスポンスを完了する前に byobRequest.view
を内部的に移譲する必要がある使用する用途を意図しています。
例えば、 BYOB ソースは BYOB ビューを別個のワーカースレッドに移譲し、それが満たされたらワーカがそれを移譲し返すのを待つことができます。
構文
respondWithNewView(view)
引数
view
-
関連付けられた読み取り可能なバイトストリームの消費者が
ReadableStreamBYOBRequest.view
の代わりに書くべきTypedArray
またはDataView
です。これは
ReadableStreamBYOBRequest.view
と同じバッキングメモリー領域上のビューでなければならず、占めるメモリーは同じかそれ以下でなければなりません。 具体的には、ビューのバッファーか移譲されたもので、同じbyteOffset
を保有し、byteLength
(書き込むバイト数)がビューのバイト数以下でなければなりません。
返値
なし (undefined
)。
例外
TypeError
-
元のオブジェクトが
ReadableStreamBYOBRequest
でないか、関連するコントローラがないか、関連する内部配列バッファーが存在しないか切り離されている場合に発生します。 また、アクティブな読者がいるときにview
の長さがゼロである場合や、閉じられたストリームで呼び出されたときにゼロでない場合にも発生する可能性があります。 RangeError
-
新しい
view
がReadableStreamBYOBRequest.view
のバッキングメモリー領域と一致しない場合に発生します。 例えば、同じバッファー(または移譲されたバージョン)ではない、異なるbyteOffset
を持っている、バッキングビューで利用できるメモリーより大きい、などです。
例
移譲するビューは、 ReadableStreamBYOBRequest.view
と同じタイプであり、同じ基盤バッファーとバイトオフセットを保有し、同じかそれ以下のバイト長でなければなりません。
例えば、下記のようにビューとレスポンスを定義します。
const v = controller.byobRequest.view;
bytesRead = socket.readInto(v.buffer, v.byteOffset, v.byteLength);
byobRequest.respondWithNewView(
byobRequest.view.subarray(v.byteOffset, bytesRead),
);
仕様書
Specification |
---|
Streams Standard # ref-for-rs-byob-request-respond-with-new-view① |
ブラウザーの互換性
BCD tables only load in the browser