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