作者:心叶

时间:2018-04-26 20:33

简单的说,ArrayBuffer就代表了内存中的一段二进制数据,不可以直接读写,只可以通过在上面建立TypedArray视图或DataView视图来操作这段二进制数据,TypedArray视图主要用来操作简单类型的二进制数据,DataView用来操作复杂类型的二进制数据。

第一步:ArrayBuffer

语法:new ArrayBuffer(length) //length代表长度,单位是字节

建立一个ArrayBuffer就是这么简单,当然也可以有其它数据或对象转换而来,这里先不提,如此的一个对象,再借助下面将介绍的二个视图就可以好好利用了,不过再此之前,还是先列举一下几个会有用的方法和属性:

1.ArrayBuffer实例对象上有一个属性byteLength,可以知道实例对象的长度;

2.实例对象上的slice(起点[,终点])方法会把原来实例对象上指定的这段数据复制新建一个新的实例对象返回;

3.ArrayBuffer对象上有一个方法ArrayBuffer.isView(参数),可以用来判断传递进去的参数ArrayBuffer的实例对象。

第二步:TypedArray

视图对象种类

TypedArray是用来操作简单类型的视图,一个视图对应一个确定的类型,并且是连续的,默认为0。

该视图支持的类型如下:

Int8Array:8位有符号整数,长度1个字节。

Uint8Array:8位无符号整数,长度1个字节。

Uint8ClampedArray:8位无符号整数,长度1个字节,溢出处理不同。

Int16Array:16位有符号整数,长度2个字节。

Uint16Array:16位无符号整数,长度2个字节。

Int32Array:32位有符号整数,长度4个字节。

Uint32Array:32位无符号整数,长度4个字节。

Float32Array:32位浮点数,长度4个字节。

Float64Array:64位浮点数,长度8个字节。

建立视图对象

每种类型都有一个构造函数,用来生成对应的视图,因此其实TypedArray其实是这些视图为了方便的一个统一称呼。

上面提到的每个构造函数传递的参数有很多中,下面列举常用的四种:

TypedArray(ArrayBuffer实例对象, byteOffset=0, length?)

TypedArray(length)

TypedArray(typedArray)

TypedArray(普通的数组)

视图对象操作数据

除了个别例外(比如concat方法),视图对象的操作和普通数组的操作基本差不多,这里给出一个例子:

var arrayBuffer = new ArrayBuffer(6);//申请6个字节的内存空间

var int8Array = new Int8Array(arrayBuffer, 0, 2);//使用了2字节的空间

var int16Array = new Int16Array(arrayBuffer, 2, 2);//使用了4字节的空间

int8Array[0] = 1;

int16Array[0] = 2;

int16Array[1] = 3;

console.log(int8Array); //Int8Array(2) [1, 0]

console.log(int16Array); //Int16Array(2) [2, 3]

有用的说明

1.TypedArray实例对象的buffer属性会返回对应的ArrayBuffer对象,只读;

2.TypedArray实例对象的byteLength属性返回对象占据的内存字节数(注意这里和length属性不一样,后者是成员个数),只读;

3.TypedArray实例对象的byteOffset属性返回对象从对应的ArrayBuffer对象的那个字节开始建立的,只读。

第三步:DataView

语法:new DataView(ArrayBuffer实例对象[,字节起始位置[,长度]])

和TypedArray有很大区别的是,这里我们在使用的时候可能要去关注一下大端还是小端保存或读取数据。

视图数据操作

如果说的简单点,其实DataView就是一个非常非常厉害视图,提供了很多方法,不像TypedArray视图需要建立对应视图然后读取,你可以调用DataView的实例对象上的方法就可以实现TypedArray哪些各种视图的功能,因此,你可能会涉及到这些方法:

读数据的方法包括:getInt8、getUint8、getInt16、getUint16、getInt32、getUint32、getFloat32、getFloat64。

带二个参数,第一个参数表示读取的开始位置,第二个参数表示是大端读取(false)还是小端读取(true)。

写数据的方法包括:setInt8、setUint8、setInt16、setUint16、setInt32、setUint32、setFloat32、setFloat64。

带三个参数,第一个参数表示写入的开始位置,第二个参数表示写入的数据,第三个参数表示是大端写入(false)还是小端写入(true)。

有用的说明

1.DataView实例对象的buffer属性会返回对应的ArrayBuffer对象,只读;

2.DataView实例对象的byteLength属性返回对象占据的内存字节数(注意这里和length属性不一样,后者是成员个数),只读;

3.DataView实例对象的byteOffset属性返回对象从对应的ArrayBuffer对象的那个字节开始建立的,只读。

php 使用dataview,ECMAScript6中的二进制数据(ArrayBuffer + TypedArray + DataView)相关推荐

  1. matlab 十六进制数组,【MATLAB】MATLAB中读取二进制数据文件并加入到矩阵中

    MATLAB中读取二进制数据文件并加入到矩阵中的应用如下: 如果对c语言十分熟悉的话,应该对fopen,fclose,ftell,fseek,fread,fwrite,feof 这些函数非常熟悉了,在 ...

  2. java json转二进制数据_JSON字符串中的二进制数据 . 比Base64更好的东西

    UTF-8的问题在于它不是最节省空间的编码 . 此外,一些随机二进制字节序列是无效的UTF-8编码 . 因此,您不能将随机二进制字节序列解释为某些UTF-8数据,因为它将是无效的UTF-8编码 . 这 ...

  3. sql语句中插入二进制数据

    保存二进制数据 这段代码是将数据库中的二进制数据取出插入 保存图片 这段代码是将页面上的图片存入数据库 总之,Sql Server重罚插入二进制数据SqlParameter这个东西.

  4. 在 Web 数据控件中显示二进制数据54

    简介 前面的教程中 , 我们介绍了将二进制数据与应用程序的基础数据模型相关联的两种方法 , 并使用FileUpload 控件从浏览器向 Web 服务器的文件系统上载.我们还将了解怎样将上载的二进制数据 ...

  5. 在XML中发送二进制数据

    作者: BUILDER.COM XML通常被认为是用文本来描述数据的一种方法.例如,元素给出了文本名,元素的内容通常是基于文本的.但是有时候你需要输入数据而不是文本到你的XML文档.让我们来考虑你可能 ...

  6. python3字节转化字符_浅谈 Python3 中对二进制数据 XOR 编码的正确姿势

    Python3 中的默认编码是 UTF-8,这给大家写 Python 代码带来了很大的便利,不用再像 Python2.x 那样为数据编码操碎了心.但是,由于全面转向 UTF-8 编码,Python3 ...

  7. 从数据库中存取二进制数据并显示

    以前有讲过如何把图片信息以二进制的方式存储在sql数据库中,(详情请看:http://www.yxsoft.net.cn/article.asp?id=22)今天我们来看看, 如果把以前存储的图片读取 ...

  8. python读取二进制数据转整形,在python中读取二进制数据(替换C代码)

    我正在写一个python程序来代替C程序,它从微控制器接收数据.这是在C语言中使用一个简单的socket和read函数完成的.在我的python程序中,我可以从微控制器读取一系列数据,但我似乎无法将其 ...

  9. mysql 存储二进制数据_为什么在MySQL中存储二进制数据?

    I'm a little confused - what are the pros of storing binary data in DB? Is it for security reasons, ...

最新文章

  1. 岭南六少个人独立博客开通啦
  2. golang中的strings.HasSuffix
  3. python polygon函数_Python 人脸识别就多简单,看这个就够了!
  4. linux之lsusb命令和cd -命令使用总结
  5. 【今日CS 视觉论文速览】 25 Jan 2019
  6. python 执行shell_python中执行shell的两种方法总结
  7. 澎思科技获洪泰基金千万级天使轮融资,深耕AI+安防行业
  8. java inflater_Android下LayoutInflater的正确使用姿势
  9. Android Studio3.5 JNIDemo实现步骤详解
  10. 数字电路实验怎么接线视频讲解_铆钉是怎么被铆接的,多种铆钉动画演示(内附视频讲解)...
  11. 目标跟踪算法研究综述
  12. css3中vw/vh/vmin/vmax的含义与使用方法
  13. 如何用计算机抢座位,火车票可以自选座位啦!内附史上最强抢票攻略!
  14. Type-C笔记本电脑全功能TCPC接口方案
  15. 【食品加工技术】第一章 食品加工技术概述 笔记
  16. 前端怎么加粗字体_【推荐】皮卡丘怎么画?教你如何轻松绘画出可爱的宠物小精灵!...
  17. Mysql引擎之MyISAM引擎
  18. 最新微信三级分销系统源码 分销商城搭建 含完整代码包和安装部署教程
  19. 超级浏览器的特色功能
  20. 学报格式和论文格式一样吗_论文、学报排版格式

热门文章

  1. 传感器模组:手机摄像头模组-1亿像素是如何实现的?
  2. 【Linux】——Ubuntu18.04安装
  3. Python爬虫--爬取厦大电费
  4. 如何做好aso关键词优化提升关键词排名
  5. 如何优化我的世界服务器,我的世界服务器怎么优化 服务器优化建议
  6. 什么品牌的护眼台灯比较好?平价护眼台灯推荐
  7. 年后第一天上班就提辞职是不是“不厚道”???
  8. OLED显示材料的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  9. vue 路由history模式打包部署 The requested URL * was not found on this server. 的解决方法
  10. 当电脑开不了机出现自动修复时