可以用arrayBuffer创建二进制对象
const arrayBuffer = new ArrayBuffer(16); //创建16字节长度的二进制对象
console.log(arrayBuffer);
/**
* ArrayBuffer {
[Uint8Contents]: <00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00>,
byteLength: 16
}
*/
要访问arrayBuffer对象需要用到view,view有多种类型比如Uint8Array,Uint16Array,其中的数字代表bit
这种view对象统称为TypeArray,有数组的特征,但不能splice和concat
TypeArray有两个特殊的方法
arr.set(fromArr,[offset]),从offset(默认为0),把fromArr所有元素复制到arr
arr.subArray([begin,end]),创建一个从begin到end(不包括)的视图,有点类似slice,但创建的视图不复制元素
TypeArray可以接受不同的参数
arr(buffer),在二进制对象上创建视图
arr(object),创建一个相同长度的类型化数组,并复制其内容。
arr(typeArray),复制一个类型化数组
arr(number),创建一个长度为number的类型化数组
const arrayBuffer = new ArrayBuffer(16);
const view = new Uint8Array(arrayBuffer);
console.log(view.length); //16
console.log(view.BYTES_PER_ELEMENT); //1
for (let i = 0; i < view.length; i++) {
view[i] = i;
}
for (const item of view) {
console.log(item); // 0 1 2 3 ... 15
}
const view2 = new Uint8Array([100, 150, 200]);
view.set(view2);
for (const item of view) {
console.log(item); // 100 150 200 3 ... 15
}
dataView类型
dataView可以用更灵活的方式访问typeArray
new DataView(buffer)
dataView.getTypeArray(offset)
dataView.setTypeArray(offset)
const view = new Uint8Array([255, 255, 255, 255]);
const dataView = new DataView(view.buffer);
dataView.setUint16(0); //把前16位设为0
for (let i = 0; i < view.length; i++) {
console.log(dataView.getUint8(i)); //0 0 255 255
}