型付き配列の仕様には、既存の ArrayBuffer を取り、それを別の配列型として扱うことを可能にするコンストラクターがあります。興味深いことに、オフセット パラメータは、構築された配列の基になる型の倍数でなければなりません。この制限の理由は何でしたか?
背景として - WebSocket 経由で送信されるバイナリ バッファをエンコードしようとしています。バッファーには、さまざまなサイズのさまざまな変数が含まれています。もともと私は次のコードを使用したかった:
var buffer = new ArrayBuffer(10);
new Uint32Array(buffer, 0, 1)[0] = 234;
new Int16Array(buffer, 4, 1)[0] = -23;
new Uint32Array(buffer, 6, 1)[0] = 6000; // Exception is raised here,
// because 6 is not multiple of 4
これを機能させるには、最後の行を次のように書き直す必要があります。
var tempArray = new Uint32Array(1); // Create 32-bit array
tempArray[0] = 6000; // Write 32-bit number
var u8Src = new Uint8Array(tempArray, 0); // Create 8-bit view of the array
var u8Dest = new Uint8Array(buffer, 6, 4); // Create 8-bit view of the buffer
u8Dest.set(u8Src); // Copy bytes one by one
これは、このような単純な操作にはコードが多すぎます。