简略的说,ArrayBuffer就代表了内存中的一段二进制数据,不能够间接读写,只能够通过在下面建设TypedArray视图或DataView视图来操作这段二进制数据,TypedArray视图次要用来操作简略类型的二进制数据,DataView用来操作简单类型的二进制数据。
第一步:ArrayBuffer
new ArrayBuffer(length) //length代表长度,单位是字节
建设一个ArrayBuffer就是这么简略,当然也能够有其它数据或对象转换而来,这里先不提,如此的一个对象,再借助上面将介绍的二个视图就能够好好利用了,不过再此之前,还是先列举一下几个会有用的办法和属性:
- ArrayBuffer实例对象上有一个属性byteLength,能够晓得实例对象的长度;
- 实例对象上的slice(终点[,起点])办法会把原来实例对象上指定的这段数据复制新建一个新的实例对象返回;
- ArrayBuffer对象上有一个办法ArrayBuffer.isView(参数),能够用来判断传递进去的参数ArrayBuffer的实例对象。
第二步:TypedArray
视图对象品种
TypedArray是用来操作简略类型的视图,一个视图对应一个确定的类型,并且是间断的,默认为0。
该视图反对的类型如下:
- 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个字节。
建设视图对象
每种类型都有一个构造函数,用来生成对应的视图,因而其实TypedArray其实是这些视图为了不便的一个对立称说。
下面提到的每个构造函数传递的参数有很多中,上面列举罕用的四种:
- TypedArray(ArrayBuffer实例对象, byteOffset=0, length?)
- TypedArray(length)
- TypedArray(typedArray)
- TypedArray(一般的数组)
视图对象操作数据
除了个别例外(比方concat办法),视图对象的操作和一般数组的操作根本差不多,这里给出一个例子:
var arrayBuffer = new ArrayBuffer(6);//申请6个字节的内存空间var int8Array = new Int8Array(arrayBuffer, 0, 2);//应用了2字节的空间var int16Array = new Int16Array(arrayBuffer, 2, 2);//应用了4字节的空间int8Array[0] = 1;int16Array[0] = 2;int16Array[1] = 3;console.log(int8Array); //Int8Array(2) [1, 0]console.log(int16Array); //Int16Array(2) [2, 3]
有用的阐明
- TypedArray实例对象的buffer属性会返回对应的ArrayBuffer对象,只读;
- TypedArray实例对象的byteLength属性返回对象占据的内存字节数(留神这里和length属性不一样,后者是成员个数),只读;
- TypedArray实例对象的byteOffset属性返回对象从对应的ArrayBuffer对象的那个字节开始建设的,只读。
第三步:DataView
new DataView(ArrayBuffer实例对象[,字节起始地位[,长度]])
和TypedArray有很大区别的是,这里咱们在应用的时候可能要去关注一下大端还是小端保留或读取数据。
视图数据操作
如果说的简略点,其实DataView就是一个十分十分厉害视图,提供了很多办法,不像TypedArray视图须要建设对应视图而后读取,你能够调用DataView的实例对象上的办法就能够实现TypedArray哪些各种视图的性能,因而,你可能会波及到这些办法:
读数据的办法包含:getInt8、getUint8、getInt16、getUint16、getInt32、getUint32、getFloat32、getFloat64。
带二个参数,第一个参数示意读取的开始地位,第二个参数示意是大端读取(false)还是小端读取(true)。
写数据的办法包含:setInt8、setUint8、setInt16、setUint16、setInt32、setUint32、setFloat32、setFloat64。
带三个参数,第一个参数示意写入的开始地位,第二个参数示意写入的数据,第三个参数示意是大端写入(false)还是小端写入(true)。
有用的阐明
- DataView实例对象的buffer属性会返回对应的ArrayBuffer对象,只读;
- DataView实例对象的byteLength属性返回对象占据的内存字节数(留神这里和length属性不一样,后者是成员个数),只读;
- DataView实例对象的byteOffset属性返回对象从对应的ArrayBuffer对象的那个字节开始建设的,只读。