ArrayBuffer
- ArrayBuffer放0和1组成的二进制数据
- ArrayBuffer把数据放在栈中,取数据时较快
- ArrayBuffer初始化后固定大小
ArrayBuffer对象并没有提供任何读写内存的方法,而是允许在其上方建立“视图”,从而插入与读取内存中的数据。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| private TestArrayBuffer() { var arraybuffer = new ArrayBuffer(8);
var aView = new Int8Array(arraybuffer, 0, 4); var bView = new Int8Array(arraybuffer, 4, 4);
for(let i = 0; i < aView.length; ++i) { aView[i] = i }
for(let i = 0; i < bView.length; ++i) { bView[i] = i * 10 }
console.warn(arraybuffer) console.warn(aView) console.warn(bView) }
|
类型视图
视图类型 |
数据类型 |
占用位数 |
占用字节 |
有无符号 |
Int8Array |
整数 |
8 |
1 |
有 |
Uint8Array |
整数 |
8 |
1 |
无 |
Uint8ClampedArray |
整数 |
8 |
1 |
无 |
Int16Array |
整数 |
16 |
2 |
有 |
Uint16Array |
整数 |
16 |
2 |
无 |
Int32Array |
整数 |
32 |
4 |
有 |
Uint32Array |
整数 |
32 |
4 |
无 |
Float32Array |
浮点数 |
32 |
4 |
有 |
Float64Array |
浮点数 |
64 |
8 |
有 |
接口 |
描述 |
buffer |
返回ArrayBuffer的引用 |
byteLength |
返回字节长度 |
byteOffset |
返回视图在该ArrayBuffer中占用内存区域的起点位置 |
length |
返回视图数据的个数 |
set() |
第一个参数为已有的视图或者数组,第二个参数代表从第几个字节开始设置值 |
subarray |
返回一个新的视图,如果第二个参数省略,则取剩余的全部 |
DataView视图
为了解决各种硬件设备、数据传输等对默认字节序的设定不一而导致解码时候会发生的混乱问题,javascript提供了DataView类型的视图来让开发者在对内存进行读写时手动设定字节序的类型。
值得注意的是,在DataView视图中,读写超出其实例化时的范围的值时,都会发生错误,这跟之前的固定类型的视图不一样,在使用时更加谨慎。
使用
1 2 3 4 5 6 7 8
| private TestEndian() { var buffer = new ArrayBuffer(2); new DataView(buffer).setInt16(0, 256, true);
return new Int16Array(buffer)[0] === 256; }
|