码迷,mamicode.com
首页 > 其他好文 > 详细

ArrayBuffer

时间:2019-01-14 16:34:30      阅读:308      评论:0      收藏:0      [点我收藏+]

标签:默认   返回   字节   属性   写入   网络   长度   第一个   svi   

ArrayBuffer对象代表原始的二进制数据,TypedArray视图用来读写简单类型的二进制数据,DataView视图用来读写复杂类型的二进制数据

二进制数组并不是真正的数组,而是类似数组的对象

ArrayBuffer


概述

ArrayBuffer对象代表储存二进制数据的一段内存,它不能直接读写,只能通过视图(TypedArray视图和DataView视图)来读写,视图的作用是以指定格式解读二进制数据。

ArrayBuffer也是一个构造函数,可以分配一段可以存放数据的连续内存区域。

const buf = new ArrayBuffer(32);

上面代码生成了一段 32 字节的内存区域

ArrayBuffer.prototype.byteLength

返回所分配的内存区域的字节长度

ArrayBuffer.prototype.slice()

允许将内存区域的一部分,拷贝生成一个新的ArrayBuffer对象

ArrayBuffer.isView()

返回一个布尔值,表示参数是否为ArrayBuffer的视图实例


TypedArray 视图

ArrayBuffer对象作为内存区域,可以存放多种类型的数据。同一段内存,不同数据有不同的解读方式,这就叫做“视图”(view)

普通数组与 TypedArray 数组的差异主要在以下方面

  • TypedArray 数组的所有成员,都是同一种类型。
  • TypedArray 数组的成员是连续的,不会有空位。
  • TypedArray 数组成员的默认值为 0。比如,new Array(10)返回一个普通数组,里面没有任何成员,只是 10 个空位;new Uint8Array(10)返回一个 TypedArray 数组,里面 10 个成员都是 0。
  • TypedArray 数组只是一层视图,本身不储存数据,它的数据都储存在底层的ArrayBuffer对象之中,要获取底层对象必须使用buffer属性。

视图的构造函数可以接受三个参数:

  • 第一个参数(必需):视图对应的底层ArrayBuffer对象。
  • 第二个参数(可选):视图开始的字节序号,默认从 0 开始。
  • 第三个参数(可选):视图包含的数据个数,默认直到本段内存区域结束。

字节序

字节序指的是数值在内存中的表示方式。

x86 体系的计算机都采用小端字节序(little endian),相对重要的字节排在后面的内存地址,相对不重要字节排在前面的内存地址

TypedArray 数组内部也采用小端字节序读写数据,或者更准确的说,按照本机操作系统设定的字节序读写数据。

BYTES_PER_ELEMENT 属性

每一种视图的构造函数,都有一个BYTES_PER_ELEMENT属性,表示这种数据类型占据的字节数。

溢出

TypedArray 数组的溢出处理规则,简单来说,就是抛弃溢出的位,然后按照视图类型进行解释。


复合视图

由于视图的构造函数可以指定起始位置和长度,所以在同一段内存之中,可以依次存放不同类型的数据,这叫做“复合视图”。

DataView视图的设计目的,是用来处理网络设备传来的数据,所以大端字节序或小端字节序是可以自行设定的。

DataView通过get和set方法对内存进行读取或写入操作,get和set的最后一个参数通过设置true来转变为小端字节序解读,默认是大端字节序,对于两个或两个字节以上的方法,需要设置字节序

ArrayBuffer

标签:默认   返回   字节   属性   写入   网络   长度   第一个   svi   

原文地址:https://www.cnblogs.com/goOtter/p/10266807.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!