js-doc-数组

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);

// true ---->littleEndian
// false ---->BigEndian
return new Int16Array(buffer)[0] === 256;
}