- JavaScript型の配列は配列のようなオブジェクトであり、生のバイナリデータにアクセスするためのメカニズムを提供します。
- Arrayに格納されているオブジェクトは、動的に増減でき、任意のJavaScript値を格納できます。JavaScriptエンジンは、配列の操作を非常に高速にできるように、いくつかの内部最適化を行います。
一般的に、型付き配列は通常WebGLで使用され、WebGLを使用する場合はArrayBuffersがどこにでもあります。ブラウザはWebGLを介してグラフィックカードと通信し、それらの間で大量のリアルタイムデータ相互作用が発生し、パフォーマンス要件が特に高くなります。パフォーマンス要件を満たすには、従来のテキスト形式ではなく、バイナリである必要があります。 。
バッファーとビュー:型付き配列アーキテクチャ
最大限の柔軟性と効率を実現するために、JavaScriptの型付き配列(型付き配列)は、実装をバッファーとビューの2つの部分に分割します。バッファー(ArrayBufferオブジェクトによって実装される)は、データのブロックを記述します。バッファにはフォーマットがまったくなく、そのコンテンツにアクセスするメカニズムを提供していません。バッファオブジェクトに含まれるメモリにアクセスするには、ビューを使用する必要があります。ビューは、データを実際の型付き配列に変換するためのコンテキスト(つまり、データ型、開始オフセット、および要素数)を提供します。
ArrayBuffer
ArrayBufferは、ユニバーサルな固定長のバイナリデータバッファを表すために使用されるデータ型です。ArrayBufferの内容を直接操作することはできません。型付き配列のビュー、またはバッファーのデータ形式を説明するDataViewを作成し、それらを使用してバッファーの内容を読み書きする必要があります。
データビュー
DataViewは低レベルのインターフェースであり、バッファー内の任意のデータを操作できる読み取りおよび書き込みインターフェースを提供します。これは、さまざまなタイプのデータを操作するシナリオで非常に役立ちます。たとえば、型付き配列ビューはすべてローカルエンディアンモードで実行され(エンディアンを参照)、エンディアンはDataViewを使用して制御できます。デフォルトはビッグエンディアンですが、読み取りおよび書き込みインターフェイスを呼び出してリトルエンディアンに変更できます。
使用例:
<script type="text/javascript">
//创建一个16字节固定长度的缓冲
var buffer = new ArrayBuffer(16);
console.log("创建缓冲:")
console.log(buffer)
if (buffer.byteLength === 16) {
console.log("Yes, it's 16 bytes.");
} else {
console.log("Oh no, it's the wrong size!");
}
// 创建视图
// 此视图将把缓冲内的数据格式化为一个32位的有符号整数数组
var int32View = new Int32Array(buffer);
console.log("视图转换:")
console.log(int32View)
for (var i = 0; i < int32View.length; i++) {
int32View[i] = i * 2;
}
// 将类型化数组转换为普通数组
var array = Array.from(int32View)
console.log("普通数组:")
console.log(array)
</script>
効果: