Node.js の Buffer ↗ API は、バイナリデータを操作するための、よく使われる Node.js API の 1 つです。すべての Buffer インスタンスは標準の Uint8Array ↗ クラスを拡張しつつ、組み込みの base64 / hex エンコードとデコード、バイト順の操作、エンコーディングを意識した部分文字列検索など、独自の機能を追加します。
import { Buffer } from "node:buffer";
const buf = Buffer.from("hello world", "utf8");
console.log(buf.toString("hex"));
// Prints: 68656c6c6f20776f726c64
console.log(buf.toString("base64"));
// Prints: aGVsbG8gd29ybGQ=Buffer は Uint8Array を拡張しています。そのため、新しい Response の作成など、現在 Uint8Array を受け付ける任意の Workers API で使えます。
const response = new Response(Buffer.from("hello world"));ストリームと連携するときにも、Buffer API を使えます。
const writable = getWritableStreamSomehow();
const writer = writable.getWriter();
writer.write(Buffer.from("hello world"));Workers の Buffer 実装と Node.js の実装との主な違いは、Node.js ではパフォーマンス最適化として、一部の作成方法がグローバルなメモリプールから Buffer を割り当てる点です。Workers の実装はメモリプールを使わず、すべての Buffer インスタンスを個別に割り当てます。
さらに、Node.js では Buffer.allocUnsafe() メソッドで未初期化メモリの Buffer を割り当てられます。Workers ではこれはサポートされません。Buffer インスタンスは常に初期化され、割り当て時は必ずヌルバイト(0x00)で埋められます。
詳細は Node.js の Buffer ドキュメント ↗ を参照してください。