BYOB は bring your own buffer(自分のバッファーを持参する)の略です。ReadableStreamBYOBReader を使うと、開発者が用意したバッファーへ読み込めるため、コピーを減らせます。
ReadableStreamBYOBReader のインスタンスは、read メソッドを除き ReadableStreamDefaultReader と同じように動作します。
ReadableStreamBYOBReader はコンストラクターでは生成しません。ReadableStream から取得します。
const { readable, writable } = new TransformStream();
const reader = readable.getReader({ mode: 'byob' });-
read(bufferArrayBufferView): Promise<ReadableStreamBYOBReadResult>- 渡したバッファーへ次のチャンクを読み込み、その Promise を返します。
-
readAtLeast(minElements, bufferArrayBufferView): Promise<ReadableStreamBYOBReadResult>-
渡したバッファーへ次のチャンクを読み込み、その Promise を返します。少なくとも
minElements個の要素が読み込まれるまで、Promise は解決しません。要素サイズはbufferArrayBufferViewで決まります。たとえばUint32Arrayなら要素あたり 4 バイトです。ただし、ストリームの終端に達した場合や、基盤ストリームが閉じられた場合は、minElements未満でも返ることがあります。具体的には次のとおりです。minElements個以上の要素が利用できる場合、Promise は{ value: <読み込んだバイト数に合わせたバッファービュー>, done: false }で解決します。- データが一部読み込まれたあとにストリームが終了し、要素数が
minElements未満の場合、Promise は部分データ{ value: <実際に読み込んだバイト数に合わせたバッファービュー>, done: false }で解決します。次のreadまたはreadAtLeastの呼び出しは{ value: undefined, done: true }を返します。 - 利用可能なバイトが 0 の状態でストリームが終了した場合(すでに EOF)、Promise は
{ value: <長さ 0 のビュー>, done: true }で解決します。 - ストリームがエラーになった場合、Promise は拒否されます。
minElementsは 1 以上である必要があり、minElements * elementSizeがbufferArrayBufferViewのバイト長を超えてはいけません。超えると Promise はTypeErrorで拒否されます。Uint8Arrayの要素サイズは 1 なので、minElementsは実質的にバイト数です。
-