【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オブジェクト自身を返します。