Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【Node.js24.x】ReadableStreamBYOBRequest::ReadableStreamBYOBRequest()関数の使い方

ReadableStreamBYOBRequest関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

ReadableStreamBYOBRequest関数は、WebストリームAPIの一部として、特にバイトを直接読み込むためのストリーム(ReadableByteStream)において、BYOB(Bring Your Own Buffer)リーダーからの読み取り要求を管理するオブジェクトを生成する関数です。このBYOB方式とは、データを生成するストリームが新しいバッファを作成するのではなく、データを読み取る側(リーダー)が提供した既存のバッファに直接データを書き込むことで、メモリのコピー処理を減らし、アプリケーションのパフォーマンスを向上させるための仕組みを指します。

この関数によって生成されるReadableStreamBYOBRequestオブジェクトは、ストリームの内部でデータを提供する側(ストリームソース)に対して、書き込むべきバッファの情報を提供します。具体的には、オブジェクトのviewプロパティを通じて、データを書き込み可能なArrayBufferViewが提供されます。ストリームソースは、このviewに直接データを書き込んだ後、respond(bytesWritten)メソッドを呼び出して、実際に書き込んだバイト数をストリームに通知する必要があります。あるいは、別のバッファビューを使用して応答する場合はrespondWithNewView(view)メソッドを使用します。これにより、ストリームはリーダーの要求に応答し、効率的なデータフローを継続できるようになります。

システムエンジニアを目指す初心者の方にとって、このメカニズムは、ネットワーク通信やファイルI/Oなど、大量のバイトデータを扱う際に、メモリ効率の良いデータ転送を実現するための重要な概念です。ストリーム処理のパフォーマンス最適化において、このBYOBリクエストの適切な利用は、より効率的なシステム構築に繋がります。

構文(syntax)

1const { ReadableStream } = require('stream/web');
2
3new ReadableStream({
4  type: 'bytes', // BYOB (Bring Your Own Buffer) ストリームであることを示す
5  pull(controller) {
6    const byobRequest = controller.byobRequest; // ReadableStreamBYOBRequest オブジェクト
7
8    if (byobRequest) {
9      const view = byobRequest.view; // リーダーから提供されたバッファのTypedArrayビュー
10      const sampleData = new Uint8Array([0x4e, 0x6f, 0x64, 0x65, 0x6a, 0x73]); // 例: "Nodejs"のバイト列
11      const bytesWritten = Math.min(view.byteLength, sampleData.byteLength);
12
13      view.set(sampleData.subarray(0, bytesWritten)); // データをビューに書き込む
14      byobRequest.respond(bytesWritten); // 書き込んだバイト数を応答
15
16      // 必要に応じて、新しいビューを生成して応答することも可能
17      // byobRequest.respondWithNewView(new Uint8Array(new ArrayBuffer(10)));
18    } else {
19      // BYOBリクエストがない場合の処理(通常は発生しない、または別のデータ供給方法)
20      controller.close();
21    }
22  }
23});

引数(parameters)

引数なし

引数はありません

戻り値(return)

ReadableStreamBYOBRequest

ReadableStreamBYOBRequestオブジェクト自身を返します。

関連コンテンツ