我在Chrome的最新动态里提到了Typed Arrays(Typed Array,类型数组)这个概念,可能对很多人来说非常陌生,那么它是什么,又有什么用途呢?
之前的问题
Web应用程序变得越来越强大,例如新增了音视频处理、WebSocket等多个功能特性。毫无疑问,如果Javascript能够快速方便的 *** 作原始二进制数据会相当的有用。过去,我们必须要把原始数据当作字符串来处理,并且使用charCodeAt方法来从数据缓冲区中读取字节。
但是这种方法需要多次转换数据(尤其在二进制数据不是字节格式的数据时,例如32位整数或者浮点数),所以非常慢而且容易出错。
Javascript需要一种机制来更有效的访问原始的二进制数据,由此产生了类型数组。
定义
其实除了Javascript,类型数组在其他很多语言中也有。它是一种数组,只有一种变量的类型。例如,一个float类型的数组将只包含浮点数而不能混用字符串和浮点数。此外,一个类型数组在初始化后不能改变大小。它看起来形式和普通Javascript数组很像,但是数据格式是一致和同一类型的(例如声音或者像素点的缓冲数据)。
类型数组的规范参见这里。这个规范实质上定义了一种arrayBuffer类型,相当于一个普通的定长二进制缓冲区。我们不能直接访问和 *** 作arrayBuffer的内容,而需要类型数组来创建arrayBuffer的视图(从技术上来说,类型数组等同于arrayBuffer,因为它们本质上是一样的)。例如,要访问32位有符号整数数组作为缓冲区,会创建一个Int32Array的类型数组来指向arrayBuffer。
多个类型数组视图可以指向同一个arrayBuffer,采用不同的类型、不同的长度以及不同的位移。例如下面的代码:
上述代码里变量的数据结构如下所示。
变量的数据结构
类型数组包括以下几种类型:
名称
大小 (以字节为单位)
说明
Int8Array
1
8位有符号整数
Uint8Array
1
8位无符号整数
Int16Array
2
16位有符号整数
Uint16Array
2
16位无符号整数
Int32Array
4
32位有符号整数
Uint32Array
4
32位无符号整数
Float32Array
4
32位浮点数
Float64Array
8
64位浮点数
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)