Pot.js で利用可能。 PotLite.js では利用できません。
Pot.ArrayBufferoid の新しいインスタンスを生成します。
引数に数値 (Number) を渡すと、その数の分の要素を持つインスタンスが返ります。
引数に配列 (Array) または TypedArray を渡すと、その要素を持つ Pot.ArrayBufferoid のインスタンスが返ります。
引数に Pot.ArrayBufferoid インスタンスを渡すと、そのコピーが返ります。
引数を省略すると、空の要素をもつインスタンスが返ります。
Pot.globalize() が適応されている場合、new Pot.ArrayBufferoid() が new ArrayBufferoid() で実行できます。
Pot.ArrayBufferoid の新しいインスタンスが返ります。
// Number Pot.debug(new Pot.ArrayBufferoid(5)); // [undefined, undefined, undefined, undefined, undefined] // Array Pot.debug(new Pot.ArrayBufferoid([1, 2, 3, 4, 5])); // [1, 2, 3, 4, 5] // ArrayBufferoid var buffer = new Pot.ArrayBufferoid([1, 2, 3]); var buffer2 = new Pot.ArrayBufferoid(buffer); Pot.debug(buffer); // [1, 2, 3] buffer[0] = 10; Pot.debug(buffer); // [10, 2, 3] Pot.debug(buffer2); // [1, 2, 3] // Typed Array var uint8array = new Uint8Array([97, 98, 99]); var buffer = new Pot.ArrayBufferoid(uint8array); Pot.debug(buffer); // [97, 98, 99]
Pot.ArrayBufferoid は、TypedArray や DataView をクロスブラウザに扱う際に役立ちます。
Array.prototype 同様の機能を持っているため、
Array または TypedArray のように扱うことが可能です。
また、Pot.ArrayBufferoid は TypedArray へ変換する架け橋として利用でき、
ストリームで使用する際にも役立ちます。
var buffer = new Pot.ArrayBufferoid(); var i = 0; // index指定によって値を埋める buffer[i++] = 255; buffer[i++] = 254; // push (Array.prototype.push) を使って値を埋める buffer.push(253); buffer.push(252); // DataView がない環境でも同じ機能が使えるようになります Pot.debug(buffer.getUint16(0, true)); // 65279 // length は size() を使います Pot.debug('buffer.length = ' + buffer.size()); // 4 // Typed Array に変換 (ない環境は Array になる) var arrayBuffer = buffer.toArrayBuffer(); var uint8Array = buffer.toUint8Array(); // ストリームな使い方 buffer.seek(0); var data1 = buffer.read(1); Pot.debug(data1[0]); // 255 Pot.debug(buffer.tell()); // 1 var data2 = buffer.read(2); Pot.debug(data2); // [254, 253] buffer.seek(0); buffer.write([100, 101]); Pot.debug(buffer); // [100, 101, 253, 252]
Pot.ArrayBufferoid は、変換やコピーを扱う関数を持っています。
// Uint8Arrayに変換 var uint8array = Pot.ArrayBufferoid.toUint8Array([0x61, 0x62, 0x63]); // TypedArrayをコピー var copy = Pot.ArrayBufferoid.copyBuffer(uint8array); // 文字列に変換 var binary = Pot.ArrayBufferoid.bufferToBinary(copy); Pot.debug(binary); // 'abc' // 巨大な配列を var view = new Pot.ArrrayBufferoid(1000000).toUint8Array(); for (var i = 0; i < 1000000; i++) { view[i] = 0x61; } // 非同期で負荷をかけずに変換 Pot.ArrayBufferoid.bufferToBinary.deferred(view).then(function(res) { Pot.debug(res); // 'aaaaaaaaaaa...' }); // UTF-16 文字列から UTF-8 Buffer に変換と逆変換 var s = 'hogeほげ'; var buffer = Pot.ArrayBufferoid.stringToBuffer(s); var string = Pot.ArrayBufferoid.bufferToString(buffer); Pot.debug(buffer); // buffer: // [104, 111, 103, 101, 227, 129, 187, 227, 129, 146] Pot.debug(s === string); // true