概念

定型数组所指的其实是一种非凡的蕴含数值类型的数组。不便咱们将数据以二进制模式存到内存中,并提供读取办法

前置常识

ArrayBuffer

ArrayBuffer是所有定型数组及视图援用的根本单位

var buffer = new ArrayBuffer(2);buffer.byteLength//2,buffer的字节数var buffer1 = buffer.slice(1)//截取bufferbuffer1.byteLength//1
1、申明的ArrayBuffer会将所有二进制位初始为02、ArrayBuffer能够被垃圾回收,不需手动革除

ElementType

DataView

DataView是第一种操作ArrayView的工具

var buffer = new ArrayBuffer(2)var view = new DataView(buffer);view.byteOffset//0view.byteLength//2var view1 = new DataView(buffer,1,1);view1.byteOffset//1view1.byteLength//1

赋值和取值

var buffer = new ArrayBuffer(2)var view = new DataView(buffer);view.setUint8(0,1)view.getUint8(0);//1view.getUint8(1);//0

字节序

在取值和赋值办法中默认都是安照字节的失常程序来的,而当咱们最初一个参数指定为true就是倒着存,倒着取了

var buffer = new ArrayBuffer(2)var view = new DataView(buffer);view.setUint16(0,1)//00000000  00000001  view.getUint16(0,true)//(00000001 00000000)-> 256,字节序反了view.setUint16(0,1,true)//00000001 00000000  view.getUint16(0,1)//256

溢出问题

var buffer = new ArrayBuffer(2)var view = new DataView(buffer);view.setUint8(0,256)view.getUint8(0)//0,从低位数开始取,疏忽超出的高位数view.setUint8(2,1)//超出length,RangeError

定型数组

与DataView一样,定型数组也能够操作ArrayBuffer,然而它继承了Array中许多办法,能够更加不便的操作ArrayBuffer

var buffer = new ArrayBuffer(2)var array = new Uint16Array(buffer)console.log(array.length);//1console.log(array.buffer===buffer);//truevar array1 = new Uint16Array(array)//调配新的缓存,深拷贝var array2 = array.slice(0,1)//调配新的缓存,深拷贝array = Uint16Array.of(1,2,3) //长度为3,值为1,2,3array = Uint16Array.from([1,2,3]) //长度为3,值为1,2,3array[0]//取值array[0]=2//赋值

set办法

set办法用来在指定地位处填充数据

var buffer = new ArrayBuffer(4)var array = new Uint16Array(buffer)array.set([1,2],0)//[1,2]

subarray办法

subarray依据开始索引和完结索引返回定型数组的子数组

var buffer = new ArrayBuffer(4)var array = new Uint16Array(buffer)array.set([1,2],0)//[1,2]var sub = array.subarray(0,1)//Uint16Array [1]sub[0]=2console.log(array)//Uint16Array [2,2],array随之扭转

溢出问题

和DataView一样,从低位数开始取,疏忽超出的高位数

Blob与ArrayBuffer的相互转换

var buffer = new ArrayBuffer(1);var arrayBuffer = new Uint16Array([1,2])var b = new Blob([buffer,arrayBuffer])//ArrayBuffer转换为Blobconsole.log(b)//Blob {size: 5, type: ""}var reader = new FileReader();reader.onloadend = function(){  console.log(this.result)//ArrayBuffer(5)}reader.readAsArrayBuffer(b)//Blob转换为ArrayBuffer