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位浮点数

最新文章

  1. chrome谷歌浏览器插件制作简易教程
  2. 在Visual Lisp中处理自动化错误
  3. php中的常用数组函数(一)(比较多个数组的差集的函数们 array_diff_assoc() array_diff() array_diff_key() array_diff_ukey() array_diff_uassoc())
  4. Revit二次开发示例:Journaling
  5. 约瑟夫环 --- 面向对象 --- java代码
  6. [App]Xamarin First(Or Last One) App
  7. JAVA之旅(三十二)——JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用
  8. 如何加快C++代码的编译速度 转 ccache
  9. 对TCP协议握手的理解(转)
  10. Tree Constructing CodeForces - 1003E(构造)
  11. Java 虚拟机类加载器
  12. 算法笔记_121:蓝桥杯第六届省赛(Java语言C组部分习题)试题解答
  13. Json动态添加属性
  14. app遍历——appCrawler的使用
  15. 关于Linq中First、FirstOrDefault;Single、SingleOrDefault等方法的说明
  16. PAT——1020. 月饼
  17. UE4与Visual Studio版本对应关系
  18. c# @符号后面对 双引号转义
  19. EasyNVR智能云终端硬件使用说明(EasyNVR无插件直播服务硬件的具体使用方法)
  20. bzoj 2850 巧克力王国 —— K-D树

热门文章

  1. (转)x264 编码流程
  2. Labview按钮的机械动作
  3. struts2将数据通过Json格式显示于EasyUI-datagrid数据表格
  4. php对gzip的使用(实例)
  5. 查询_修改SQL Server 2005中数据库文件存放路径
  6. unity3d多个版本共存
  7. Oracle收购Apiary来加强其API集成云
  8. [转载]Linux I/O 调度方法
  9. C文件流
  10. InstallShield程序打包图解