关于 Javascript 中的 ArrayBuffer

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/felixking/article/details/51942083

Javascript 中的 ArrayBuffer 是真正存储缓冲区数据的对象, 可以直接创建, 类似C++一样

var buffer = new ArrayBuffer(8);

参数为缓冲区大小, 单位为字节

ArrayBuffer 不能直接操作, 只能调用 byteLength 属性获得其长度, 还可以调用 slice 方法 创建一个新的 ArrayBuffer, 这个新的ArrayBuffer 将为当前 ArrayBuffer 的部分数据或全部数据的拷贝

var subBuffer = buffer.slice(4, 8);

第一个参数为 beginByte, 即拷贝的起始位置, 第二个参数为 endByte(注:不是长度), 即结束位置的后一个索引(如果没有指定即取 buffer.byteLength), 有点类似stl的 vector::end()


ArraryBufferView 是一个基类, 用于读写ArrayBuffer的, 其派生类有

Float32Array, Float64Array, Int8Array, Int16Array, Int32Array, Uint8Array, Uint8ClampedArray, Uint16Array, Uint32Array

用于当作某个固定类型的数组

注: Uint8ClampedArray 为截断类型, 即数据小于0则为0, 数据大于255则为255, 会自动截断, 而不是类似 C++ 的强制转换

创建时, 可以使用 ArrayBuffer 作为参数

var int8Array = new Int8Array(buffer);

var int16Array = new Int16Array(buffer);

这样, 就会创建两个View, 同时指向同一片缓冲区buffer了

这些 View 类型 还能直接创建, 其构造函数会自行创建一个自己的 ArrayBuffer


ArrayBufferView 的 派生类还有 DataView

它提供了更加灵活的数据读写方式, 而不仅仅限于某一种数据类型

猜你喜欢

转载自blog.csdn.net/felixking/article/details/51942083