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
它提供了更加灵活的数据读写方式, 而不仅仅限于某一种数据类型