Typed Arrays in javascripts

Typed Arrays(类型数组)这个概念,可能对很多人来说非常陌生,那么它是什么,又有什么用途呢?

之前的问题

        Web应用程序变得越来越强大,例如新增了音视频处理、WebSocket等多个功能特性。毫无疑问,如果Javascript能够快速方便的操作原始二 进制数据会相当的有用。过去,我们必须要把原始数据当作字符串来处理,并且使用charCodeAt方法来从数据缓冲区中读取字节。

        但是这种方法需要多次转换数据(尤其在二进制数据不是字节格式的数据时,例如32位整数或者浮点数),所以非常慢而且容易出错。

        Javascript需要一种机制来更有效的访问原始的二进制数据,由此产生了类型数组。

var x = new Uint8Array([1,0,0,0]);
var a = x[0].toString()+x[1].toString()+x[2].toString()+x[3].toString();
console.log(parseInt(a, 2));
console.log(a.length);

多个类型数组视图可以指向同一个arrayBuffer,采用不同的类型、不同的长度以及不同的位移。例如下面的代码:


[html] // 创建一个8字节的ArrayBuffer 
var b = new ArrayBuffer(8); 
 
// 创建一个指向b的视图v1,采用Int32类型,开始于默认的字节索引0,直到缓冲区的末尾 
var v1 = new Int32Array(b); 
 
// 创建一个指向b的视图v2,采用Uint8类型,开始于字节索引2,直到缓冲区的末尾 
var v2 = new Uint8Array(b, 2); 
 
// 创建一个指向b的视图v3,采用Int16类型,开始于字节索引2,长度为2 
var v3 = new Int16Array(b, 2, 2); 
      // 创建一个8字节的ArrayBuffer
      var b = new ArrayBuffer(8);

      // 创建一个指向b的视图v1,采用Int32类型,开始于默认的字节索引0,直到缓冲区的末尾
      var v1 = new Int32Array(b);

      // 创建一个指向b的视图v2,采用Uint8类型,开始于字节索引2,直到缓冲区的末尾
      var v2 = new Uint8Array(b, 2);

      // 创建一个指向b的视图v3,采用Int16类型,开始于字节索引2,长度为2
      var v3 = new Int16Array(b, 2, 2);

        上述代码里变量的数据结构如下所示。

变量的数据结构
        类型数组包括以下几种类型:

名称 大小(以字节为单位) 说明
Int8Array 1 8位有符号整数
Uint8Array 1 8位无符号整数
Int16Array 2 16位有符号整数
Uint16Array 2 16位无符号整数
Int32Array 4 32位有符号整数
Uint32Array 4 32位无符号整数
Float32Array 4 32位浮点数
Float64Array 8 64位浮点数
原文地址:https://www.cnblogs.com/SZLLQ2000/p/5209095.html