1 .随着web应用程序变得越来越大,出现了大量的数据。所以需要一种方式可以直接快速方便的通过类型化数组来操作原始的二进制数据
2 .使用原生的数组,在浏览器和显卡通信的时候,必须将他转为二进制形式,这一步非常耗时间。
3 .为了满足js与显卡之间大量的,实时的数据较缓,他们之间的数据通信必须是二进制的,而不是传统的文本格式。
缓冲
1 .ArrayBuffer描述的是一个数据块,没有格式,也不可以直接访问,单位是byte,8位
let a=new ArrayBuffer(10)
//创建一段内存区域
2 .他表示一个通用的,固定长度的二进制数据缓冲区
视图-TypedArray
1 .类型化数组视图:TypedArray对象,表示确定类型的二进制数据
1 .类型化数组视图具有自描述性的名字和所有常用的数值类型
2 .特殊的数组类型Uint8ClampedArray,可以操作0-255之间的数值,非常方便处理canvas数据
3 .数组内的所有的数据的数据类型都是一样的
4 .数组成员是连续的,不会有空位
5 .数组成员的默认值是0
6 .只是一层视图,不存储数据,他的数据都存储在底层的ArrayBuffer对象中
7 .只提供9种固定的解读数据的格式,如果想要从任意字节开始解读ArrayBuffer对象,必须使用DataView视图
2 .数据视图
1 .提供可以操作缓冲区中任意数据的读写接口。
2 .DataView对象:用来生成内存的视图,表示不确定类型的二进制数据
3 .数组内的数据可以是不同种类的数据
数据类型
1 .有符号和无符号类型的区别
1 .计算机中所有的数据都是按照二进制进行存储的,对于无符号的数据来说,他的16位可以全部用来表示数据
2 .有符号表示声明的数据可以是正数也可以是负数也可以是0,但是只能是整数。
3 .整数是以原码的形式存储的,但是负数是以补码的形式存储的,也就是源码的反码+1
4 .单精度,精确到小数点后面6位。双精度:精确到小数点后面15位,有效位是16位
5 .16位,32位,64位,分别能表示不同大小范围内的数
6 .
构造函数
1 .http://es6.ruanyifeng.com/#docs/arraybuffer
2 .同一个ArrayBuffer对像上面,可以从根据不同的数据类型,可以产生多个视图,但是如果他们的内存地址是一样的话,就会发生覆盖,修改一个的值,其他的值也会发生变化
3 .视图可以不通过ArrayBuffer对象,直接分配内存而生成
4 .视图数组的赋值操作与普通的数组的操作一摸一样
5 .TypedArray数组的构造函数,还可以接受另一个TypedArray实例作为参数
6 .此时的生成的新数组,只是复制了参数数组的值,对应的底层内存是不一样的,新数组会开辟一段新的内存储存数据
7 .利用这个原理,基于同一段内存,构造不同的视图
8 .构造函数的参数,也可以是一个普通数组,然后直接生成TypedArray实例,这时,typedArray视图会重新开辟内存,不会在原数组的内存上建立视图
9 .TypedArray数组也可以转回普通数组
10 .TypedArray数组和普通的数组一样,部署了Iterator接口,所以可以倍遍历
11 .普通数组的操作方法和属性,对TypedArray完全适用
12 .与普通数组相比,TypedArray数组的最大优点是可以直接操作内存,不需要进行数据类型转换,所以速度快的很多
13 .还有个buffer的api--http://javascript.ruanyifeng.com/nodejs/buffer.html