ArrayBuffer
对象、TypedArray
对象、DataView
对象是JavaScript用来操作二进制数据的接口。因为是使用类似数组的方法来操作二进制数据,所以又被称为二进制数组。
(1)
ArrayBuffer
对象:代表内存之中的一段二进制数据,可以通过“视图”进行操作。“视图”部署了数组接口,这意味着,可以用数组的方法操作内存。 (2)TypedArray
视图:共包括 9 种类型的视图,比如Uint8Array
(无符号 8 位整数)数组视图,Int16Array
(16 位整数)数组视图,Float32Array
(32 位浮点数)数组视图等等。 (3)DataView
视图:可以自定义复合格式的视图,比如第一个字节是 Uint8(无符号 8 位整数)、第二、三个字节是 Int16(16 位整数)、第四个字节开始是 Float32(32 位浮点数)等等,此外还可以自定义字节序。简单说,
ArrayBuffer
对象代表原始的二进制数据,TypedArray
视图用来读写简单类型的二进制数据,DataView
视图用来读写复杂类型的二进制数据。
ArrayBuffer对象
可以通过ArrayBuffer构造函数生成一个ArrayBuffer对象,分配一段连续存储的内存空间。
const arrayBuffer = new ArrayBuffer(32);
构造函数接受一个参数,表示分配空间的大小,以字节为单位,初始时,每个字节都为0。所以产出一个ArrayBuffer对象时定义的内存过大,可能会分配失败
const a = new ArrayBuffer(10000000000);
// Uncaught RangeError: Array buffer allocation failed
// at new ArrayBuffer (<anonymous>)
// at <anonymous>:1:13
如果要对ArrayBuffer对象进行操作,需要利用“视图”。
const a = new ArrayBuffer(32);
const dataView = new DataView(a);
dataView.getUnit8(0) // 0
上面代码中利用DataView视图来读取ArrayBuffer对象。也可以利用TypedArray视图中的那些构造函数来操作。
const buffer = new ArrayBuffer(12);
const x1 = new Int32Array(buffer);
x1[0] = 1;
const x2 = new Uint8Array(buffer);
x2[0] = 2;
x1[0] // 2