JavaScript

DataView コンストラクター

 編集:2022.08.05 by T.A.

¶バッファーのビュー オブジェクトの指定?。

構文
new DataView(buffer [, byteOffset [, byteLength]])
buffer 既存の ArrayBuffer または SharedArrayBuffer で、新しい DataView オブジェクトの背景となるストレージとして使用されます。
byteOffset 省略可。新しいビューが参照するバッファーの最初のバイトまでのオフセットをバイト単位で指定します。

指定されていない場合、バッファー ビューは最初のバイトから始まります。

byteLength 省略可。バイト配列の要素数です。指定しない場合、ビューの長さはバッファーの長さと一致します。
戻り値

指定されたデータ バッファーを表す DataView オブジェクトです。(これはおそらくあまり役に立たない説明でした。)

返されるオブジェクトは、バイトの配列バッファーの「インタープリター」と考えることができます。― これは読み書きの際に、バッファー内に正しく収まるように数値を変換する方法を知っています。これは、整数や浮動小数点数の変換、エンディアン、その他バイナリ形式で数値を表現する際の詳細を扱うことを意味します。

例外
RangeError
byteOffset や byteLength 引数の値がバッファーの末尾を超えて広がる結果になる場合に発生します。

例えば、バッファーが 16 バイトの長さで、byteOffset が 8 バイト、byteLength が 10 バイトの場合、バッファーの全長を 2 バイト超えるビューを展開しようとするので、このエラーが発生します。

var buffer = new ArrayBuffer(16);
var view = new DataView(buffer, 0); //オフセット0(先頭)からビューオブジェクト
view.setInt16(1, 42); //オフセット1にInt16として42を書き込む
D=view.getInt16(1); //=42
B=new ArrayBuffer(4);
V=new DataView(B, 1, 4); //エラー発生。
V=new DataView(B, 1, 3);
D=V.byteLength; //=3
B=new ArrayBuffer(4);
V=new DataView(B, 2);
V.setInt8(0, 10);
V.setInt8(1, 20);
V.setInt8(2, 30); //エラー発生。
B=new ArrayBuffer(4);
V=new DataView(B, 1, 2); //オフセット1から2byte分をビューオブジェクト?
alert(V.byteLength); //表示:2
V.setInt16(0, 300);  //バッファーの先頭からセットしてみる
D=V.getInt16(0);     //=300
alert(V.byteLength); //表示:2

テスト