TypeArray、ArrayBuffer、Blob的相互转换
Dec 29, 2015
Blob
是现代浏览器中提供的能够装载二进制流(文件)的容器对象。ArrayBuffer
是能够装载Blob
(二进制流)数据的原始缓冲区,ArrayBuffer
不能直接通过js读写。TypeArray
是ArrayBuffer
的一种类数组的视图对象,可以将ArrayBuffer
按不同字节数读取成类似数组形式的数据类型,从而可以向读写数组元素一样,实现对ArrayBuffer
数据的读写。常见的TypeArray
包括Uint8Array
,Uint16Array
,Uint32Array
等。点这里查看所有的TypedArray
所以我对三者的理解是: Blob
<-> ArrayBuffer
<-> TypeArray
<—-> Array
由于TypeArray
和Array
有些相似,因此往往我会选择在TypeArray
这层做处理。
下面是TypeArray
、ArrayBuffer
和Blob
之间相互转换的方法。
websocket接收arrayBuffer
|
|
blob轉arrayBuffer
|
|
ArrayBuffer to Blob (ArrayBuffer转Blob)
|
|
ArrayBuffer to Uint8 (ArrayBuffer转Uint8数组)
Uint8数组可以直观的看到ArrayBuffer中每个字节(1字节 == 8位)的值。一般我们要将ArrayBuffer转成Uint类型数组后才能对其中的字节进行存取操作。
|
|
Uint8 to ArrayBuffer(Uint数组转ArrayBuffer)
我们Uint8数组可以直观的看到ArrayBuffer中每个字节(1字节 == 8位)的值。一般我们要将ArrayBuffer转成Uint类型数组后才能对其中的字节进行存取操作。
|
|
Array to ArrayBuffer(普通数组转ArrayBuffer)
|
|
获取/设置ArrayBuffer对应的数值
一串ArrayBuffer是可以被“理解”为很多个值的,以下面这个值为例,
按照服务端的协议,这串数据流的格式如下:
1 unsign byte (1字节) + 1 unsign int (4字节) + 1 unsign short (2字节)
|
|
TypeArray to Array
在上文中可以看到,普通数组可以轻松的转换成TypeArray。
但TypeArray并不是Array的子集,所以它没有Array的许多方法,比如push
TypeArray的方法参见:TypedArray的方法
|
|
所以需要进行转换。
TypeArray to Array的方法,在ES6中可以用Array.form实现 (什么是Array.form)
也可以比较简单的封装一下。
|
|