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对象,分配一段连续存储的内存空间。

  1. const arrayBuffer = new ArrayBuffer(32);

构造函数接受一个参数,表示分配空间的大小,以字节为单位,初始时,每个字节都为0。所以产出一个ArrayBuffer对象时定义的内存过大,可能会分配失败

  1. const a = new ArrayBuffer(10000000000);
  2. // Uncaught RangeError: Array buffer allocation failed
  3. // at new ArrayBuffer (<anonymous>)
  4. // at <anonymous>:1:13

如果要对ArrayBuffer对象进行操作,需要利用“视图”。

  1. const a = new ArrayBuffer(32);
  2. const dataView = new DataView(a);
  3. dataView.getUnit8(0) // 0

上面代码中利用DataView视图来读取ArrayBuffer对象。也可以利用TypedArray视图中的那些构造函数来操作。

  1. const buffer = new ArrayBuffer(12);
  2. const x1 = new Int32Array(buffer);
  3. x1[0] = 1;
  4. const x2 = new Uint8Array(buffer);
  5. x2[0] = 2;
  6. x1[0] // 2

// TODO,只能先了解了

参考