ReadableStream とその他の型の間で変換を行いたいとき、Blob や Response を利用することで簡単にできる場合があります。
1. ReadableStream への変換
Blob は Blob.prototype.stream メソッドを使用することで ReadableStream へ変換できます。
文字列や ArrayBuffer、TypedArray (Uint8Array 等) は Blob を経由して ReadableStream へ変換できます。
// Blob -> ReadableStream
const readableStream = blob.stream();
// 文字列 -> Blob -> ReadableStream
const readableStream = new Blob([string]).stream();
// ArrayBuffer -> Blob -> ReadableStream
const readableStream = new Blob([arrayBuffer]).stream();
// TypedArray -> Blob -> ReadableStream
const readableStream = new Blob([typedArray]).stream();
参考「Blob - Web API | MDN」
参考「Blob() - Web API | MDN」
参考「Blob.stream() - Web API | MDN」
Response は Response.prototype.body プロパティにアクセスすることで ReadableStream を得られます。
文字列や ArrayBuffer、TypedArray (Uint8Array 等) は Response を経由して ReadableStream へ変換できます。
// Response -> ReadableStream
const readableStream = response.body;
// 文字列 -> Response -> ReadableStream
const readableStream = new Response(string).body;
// ArrayBuffer -> Response -> ReadableStream
const readableStream = new Response(arrayBuffer).body;
// TypedArray -> Response -> ReadableStream
const readableStream = new Response(typedArray).body;
参考「Response() - Web API | MDN」
参考「Response.body - Web API | MDN」
2. ReadableStream からの変換
Response はコンストラクタに ReadableStream を渡すことでインスタンス化することができます。
文字列や ArrayBuffer、Blob は Response を経由して ReadableStream から変換できます。
// ReadableStream -> Response
const response = new Response(readableStream);
// ReadableStream -> Response -> 文字列
const string = await new Response(readableStream).text();
// ReadableStream -> Response -> ArrayBuffer
const arrayBuffer = await new Response(readableStream).arrayBuffer();
// ReadableStream -> Response -> Blob
const blob = await new Response(readableStream).blob();
参考「Response - Web API | MDN」
参考「Response() - Web API | MDN」
TypedArray (Uint8Array 等) は ArrayBuffer から TypedArray コンストラクタを用いてインスタンス化して下さい。
// ArrayBuffer -> Uint8Array
const uint8Array = new Uint8Array(arrayBuffer);