Skip to content

バッファ・オブジェクト

バッファ・タイプの概要

Duktapeは、以下のバッファ・タイプおよびバッファ関連タイプを提供します。

TypeStandardDuktape versionDescription
Plain bufferNo Duktape specific1.0Plain, primitive buffer value (not an object), similar to how a plain string relates to a String object. Behaves like an Uint8Array instance where possible, object coerces to an actual Uint8Array.
ArrayBuffer objectYes ES20151.3Standard object type for representing a byte array. References an underlying plain buffer.
DataView, typed array objectsYes ES20151.3View objects to access an underlying ArrayBuffer. References an underlying plain buffer.
Node.js Buffer objectNo Node.js-like1.3Object with Node.js Buffer API, inherits from Uint8Array.prototype. References an underlying plain buffer.

バッファの種類とそのプロパティの詳細な表など、詳しい説明はbuffers.rstを参照してください。

プレーン バッファ

プレーンバッファーは、バッファーのデータを表現するための非標準的なメモリ効率の良い方法です。プレーンバッファーは Uint8Array.prototype を継承し、型付き配列のコンストラクターの引数として受け付けられるなど、Uint8Array オブジェクトを模倣しています。プレーンバッファーはプロパティテーブルを持たず、それ自身のプロパティを保持できませんが、以下の仮想または継承されたプロパティを持っています(例の値は24バイトのバッファーのものです)。

Property nameExample valueDescription
[index]0-255Index properties in the range [0, length-1]. Reads and writes behave like for Uint8Array.
length24Length of buffer in bytes. Length is not writable, so you can't resize a buffer by assigning its length.
byteOffset0Always 0, present to match typed arrays.
byteLength24Same as .length.
BYTES_PER_ELEMENT1Always 1, present to match typed arrays.
bufferGetter property which returns a new ArrayBuffer instance backing to the plain buffer without making a copy. Because plain buffers don't have a property table, a new ArrayBuffer is created on every property read. Absent if buffer object support is disabled in Duktape configuration.

ArrayBuffer や Node.js Buffer などのバッファオブジェクトは、プレーンなバッファ値の上に実装され、ビュー/スライスのサポート、型付きアクセッサ、異なるエンディアンのデータを操作するメソッドなどの追加機能を提供します。しかし、これらはプレーンなバッファよりもオーバーヘッドがあります。

詳しくは、以下を参照してください。

  • バッファの扱い方
  • 型付けアルゴリズム
  • buffers.rst

バッファを使った作業

バッファの値は C と ECMAScript の両方のコードで動作します。

  • ECMAScript コードでは、ほとんどの動作は関連する API 標準で定義されていますが、異なるバッファ・タイプの混在のような Duktape 固有の機能については例外があります。
  • Cコードでは、プレーン・バッファとバッファ・オブジェクトを操作するためのAPIコールがあります。

例としては、How to work with buffers (バッファの扱い方) を参照してください。

特殊なケースでは、バッファ・オブジェクトをバックアップするプレーン・バッファが、バッファ・オブジェクトの見かけ上のサイズをカバーするのに十分な大きさでないことがあります。Duktapeはこのようなバッファに対してメモリセーフな動作を保証していますが、それ以外の動作は呼び出しによって異なります。例えば、ある呼び出しがこの状況を無視して黙ってundefined、NaN、または0を返すこともあれば、TypeErrorを投げることもあります。アンバックアップバッファの動作はバージョン保証の対象外であり、マイナーバージョン間で変更される可能性があります。

現在の制限事項

  • TypedArrayバインディングのカスタム動作を参照してください。
  • Node.jsのBufferバインディングのカスタム動作を参照してください。