前端对于 ArrayBuffer 操作有两种方式,TypeArray 和 DataView。对于各个字节序的读取没有 Node 原生的 Buffer 对象方便。 常用的操作有: 对bit单元的操作 对字节/ 字节序的操作 对字节/ 字节序的操作 读取字节、字节序 /** * 读取32位大端字节序 */ function readUInt32BE(buffer: ArrayBuffer, offset: number) { return new DataView(buffer, offset).getInt32(0, false); } /** * 读取24位大端字节序 */ function readUInt24BE(buffer: ArrayBuffer, offset: number) { const arr = new Uint8Array(buffer); return (arr[offset] << 16) | (arr[offset + 1] << 8) | arr[offset + 2]; } /** * 读取16位大端字节序 */ function readUInt16BE(buffer: ArrayBuffer, offset: number) { return new DataView(buffer, offset).getInt16(0, false); } /** * 读取8位大端字节序 */ function readUInt8(buffer: ArrayBuffer, offset: number) { const arr = new Uint8Array(buffer); return arr[offset]; } 写入字节流 // 申请一个byteLength长度arraybuffer空间 const typeArray = new Uint8Array(byteLength); // 将newBuffer插入到arraybuffer空间中的offset位置 typeArray.set(new Uint8Array(newBuffer), offset); 复制字节流 let a = new Uint8Array([1,2,3,4,5,6]); let c = a.slice(0, 5); 共享字节流 let a = new Uint8Array([1,2,3,4,5,6]); let b = a.subarray(0, 5); 对 bit 的操作 // 获取一个字节的前4个bit readUInt8(buffer, 0) & 240) >> 4; // 获取一个字节的后4个bit readUInt8(buffer, 0) & 15; ArrayBuffer ArrayBuffer 对象,Blob 对象