ES6重读及新感(Arraybuffer类重读)

本文详细介绍了JavaScript中的ArrayBuffer对象及其视图,包括ArrayBuffer的作用、API,以及如何通过视图(TypedArray和DataView)进行二进制数据操作。此外,还讨论了字节序、ArrayBuffer与字符串的转换、溢出规则,以及SharedArrayBuffer和Atomics对象在多线程中的应用。ArrayBuffer在Node.js中尤为重要,对于处理文件操作和网络数据解析非常关键。
摘要由CSDN通过智能技术生成

 

前言:

ArrayBuffer类在浏览器端并不会很常用,浏览器端使用该方法,大部分用于处理上传文件的操作(html5中新增了webgl,也会用来写一些喂webgl功能),因此很多前端同学会认为这个语法糖并没有太大的作用。实际来说,在浏览器端大部分需要二进制流操作的部分,都由浏览器端,帮我们解决了,最典型的列子即http请求。如果浏览器端不进行处理,那我们就需要频繁的操作二进制流进行http协议的解析和数据的解析。但ArrayBuffer对node是很常见的,由于node端有大量涉及文件操作的需求,因此掌握ArrayBuffer类还有有足够必要的

一、ArrayBuffer 对象

1、作用:

用来创建二进制数据片段,不能直接读写,只能通过“视图”(TypedArray、DataView)进行操作。对同一个ArrayBuffer对象生成的内存中,生成多个视图,当对视图进行修改时,内存对象中的数据也会改变。创建ArrayBuffer对象以及视图,计算机只会分配固定的内存空间,而不涉及硬盘空间的写入。

本来,在设计目的上,ArrayBuffer对象的各种TypedArray视图,是用来向网卡、声卡之类的本机设备传送数据,所以使用本机的字节序就可以了;而DataView视图的设计目的,是用来处理网络设备传来的数据,所以大端字节序或小端字节序是可以自行设定的。

2、API:

byteLength:创建的ArrayBuffer内存片段,获取buffer的长度(二进制),如果要分配的内存区域很大,有可能分配失败(因为没有那么多的连续空余内存),所以有必要检查是否分配成功。

if (buffer.byteLength === n) {
  // 检测成功
} else {
  // 检测失败
}

slice:该方法会拷贝生成新的ArrayBuffer对象,api其他操作同Array.prototype.slice。slice方法其实包含两步,第一步是先分配一段新内存,第二步是将原来那个ArrayBuffer对象拷贝过去

isView:用来表示参数是否为ArrayBuffer的视图实例。

const buffer = new ArrayBuffer(8);
ArrayBuffer.isView(buffer) // false

const v = new Int32Array(buffer);
ArrayBuffer.isView(v) // true

 

二、TypedArray视图

1、作用:

用来对已经创建的ArrayBuffer对象创建视图,视图中可以选择多种数据类型,方便操作各种情况的数据。只能创建一种数据类型的视图

TypedArray 数组的所有成员,都是同一种类型。

TypedArray 数组的成员是连续的,不会有空位。

TypedArray 数组成员的默认值为 0。比如,new Array(10)返回一个普通数组,里面没有任何成员,只是 10 个空位;new Uint8Array(10)返回一个 TypedArray 数组,里面 10 个成员都是 0。

TypedArray 数组只是一层视图,本身不储存数据,它的数据都储存在底层的ArrayBuffer对象之中,要获取底层

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值