初学ES6笔记十

二进制数组

二进制数组由3类对象组成:
1.**ArrayBuffer对象:**代表内存中的一段二进制数据,可以通过“视图”进行操作。“视图”部署了数组接口,这意味着,可以用数组的方法操作内存。
2.**TypedArray视图:**共包括9种类型的视图,比如Uint8Array(无符号8位整数)数组视图、Int16Array(16位整数)数组视图、Float32Array(32位浮点数)数组视图等。
3.**DateView视图:**可以自定义复合格式的视图,比如第一个字节是Unit8(无符号8位整数)、第二个和第三个字节是Init16(16位整数)等,此外还可以自定义节序。

ArrayBuffer对象
ArrayBuffer对象代表存储二进制数据的一段内存,他不能直接读/写,只能通过视图(TypedArray视图和DateView视图)读/写,视图的作用是以指定格式解读二进制数据。

TypedArray视图
ArrayBuffer对象作为内存区域可以存放多种类型的数据。同一段内存,不同数据有不同的解读方式,这就叫作“视图”。
ArrayBuffer有两种视图,一种是TypedArray视图,另一种是ArrayBuffer视图。前者的数组成员都是同一个数据类型,后者的数组可以是不同的数据类型

TypedArray视图共有9种类型,每一种视图都是一宗构造函数。

  1. Int8Array:8位有符号整数,长度为1个字节。
  2. Uint8Array:8位无符号整数,长度为1个字节。
  3. Uint8ClampedArray:8位无符号整数,长度为1个字节,溢出处理不同。
  4. Int16Array:16位有符号整数,长度为2个字节。
  5. Uint16Array:16位无符号整数,长度为2个字节。
  6. Int32Array:32位有符号整数,长度为4个字节。
  7. Uint32Array:32位无符号整数,长度为4个字节。
  8. Float32Array:32位浮点数,长度为4个字节。
  9. . Float64Array:64位浮点数,长度为8个字节。

TypedArray数组的差异:

  • TypedArray数组的所有成员都是统一类型。
  • TypedArray数组的成员是连续的,不会有空位。
  • TypedArray数组成员的默认值为0.

//创建一个指向b的Int16视图,开始于字节2,长度为2
var v3-=new Int16Array(b,2,2)

视图构造函数接受3个参数:

  • 第一个参数(必需):视图对应的底层ArrayBuffer对象。
  • 第二个参数(可选):视图开始的字节序号,默认是从0开始。
  • 第三个参数(可选):视图包含的数据个数,默认直到本段内存区域结束。。

DateView视图

DateView视图提供更多操作选项,而且支持设定字节序。在设计的目的上,ArrayBuffer对象的各种TypedArray视图用于向网卡、声卡之类的本级设备传送数据,所以使用本机的字节序即可;而DateView视图用于处理网络设备传来的数据,所以大端字节序或小端字节可以自行设定。

DateView实例有以下属性,含义与ArrayBuffer实例的同名方法相同,

  • DateView:prototype.buffer:返回对应的ArrayBuffer对象。
  • DateView:prototype.byteLength:返回占据内存字节长度。
  • DateView:prototype.byteOffset:返回当前视图从对应的ArrayBuffer对象的哪个字节开始。

DateView实例提供8个方法读取内存:

  • getInt8:读取1个字节,返回一个8位整数。
  • getUint8:读取1个字节,返回一个无符号的8位整数。
  • getInt16:读取2个字节,返回一个16位整数。
  • getUint16:读取2个字节,返回一个无符号的16位整数。
  • getInt32:读取4个字节,返回一个32位整数。
  • getUint32:读取4个字节,返回一个无符号的32位整数。
  • getFloat32:读取4个字节,返回一个32位浮点数。
  • getFloat64:读取8个字节,返回一个64位浮点数。
    这一系列get方法的参数都是一个字节序号(不能是负数,否则会报错),表示从哪个字节开始读取。
    //从第1个字节读取一个8位无符号整数
    var v1=dv.getUint8(0);

DateView实例提供8个方法写入内存:

  • setInt8:写入个字节,返回一个8位整数。
  • setUint8:写入1个字节,返回一个无符号的8位整数。
  • setInt16:写入2个字节,返回一个16位整数。
  • setUint16:写入2个字节,返回一个无符号的16位整数。
  • setInt32:写入4个字节,返回一个32位整数。
  • setUint32:写入4个字节,返回一个无符号的32位整数。
  • setFloat32:写入4个字节,返回一个32位浮点数。
  • setFloat64:写入8个字节,返回一个64位浮点数。

set方法接受两个参数:第一个参数是字节序号,表示从哪个字节开始写入;第二个参数为写入的数据。对于那些写入两个或两个以上字节的方法,需要指定第三个参数,false或undefined表示使用大端字节序号写入true表示使用小端字节好写入。

//在第1个字节,以大端字节写入序写入值为25的32位整数
dv.setInt32(0,25,false);

二进制数组的应用

AJAX
允许服务器上返回二进制数据,这是分两种情况:如果明确知道返回的二进制数据类型,可以把返回类型(responseType)设置为arreybuffer;如果不知道,就设置为blod.

Canvas
网页Canvas元素输出的二进制像素数据就是TypeArray数组。

Fetch API

Fetch API取回的数据就是ArrayBuffer对象。

File API
如果知道一个文件的二进制数据类型,也可以将这个文件读取为ArrayBuffer对象。

猜你喜欢

转载自blog.csdn.net/weixin_44072887/article/details/88989897