TypeArray、ArrayBuffer、Blob的相互转换

websocket 可以指定接受数据为 ArrayBuffer

/* websocket的情况下二进制流的获取 */
var svip = 'ws://127.0.0.1:8080';
var ws = new WebSocket(svip);
ws.binaryType = 'arraybuffer'
ws.onmessage = function (e) {
    var message = e.data;
}

Blob 转 ArrayBuffer

const blob = new Blob();
blob.arrayBuffer().then((ab) => console.log(ab))

// 或者通过FileReader
const fr = new FileReader(); fr.onload = function(){ const arrayBuffer = this.result; } fr.readAsArrayBuffer(blob);

ArrayBuffer 转 Blob

const ab = new ArrayBuffer(32);
const blob = new Blob([ab]); // 注意必须包裹[]

ArrayBuffer 转 TypeArray

const ab = new ArrayBuffer(10);
const u8 = new Uint8Array(ab);
const u16 = new Uint16Array(ab);
const u32 = new Uint32Array(ab);
const i8 = new Int8Array(ab);
const i16 = new Int16Array(ab);
const i32 = new Int32Array(ab);
const f32 = new Float32Array(ab);
const i32 = new Float32Array(ab);

TypeArray 转 ArrayBuffer

// Uint8Array 举例,其他一致
const u8 = new Uint8Array();
const ab = u8.buffer;

Array 转 ArrayBuffer

const arr = [1, 2, 3, 4, 5];
// 通过 TypeArray 来转换
var u8 = new Uint8Array(arr); var ab = u8.buffer;

// 或者通过 DataView 来设置,通过遍历数组来填充
const buffer = new ArrayBuffer(16); const view1 = new DataView(buffer);

arr.forEach((num, i) =>
view1.setInt8(i, num));
// 或者
const iter = arr.entries()
for(let [key, value] of iter) {
  view1.setInt8(key, value)
}

TypeArray、ArrayBuffer、Blob 转数组

const arr = Array.from(/* TypeArray | ArrayBuffer | Blob */)

参考:http://shihuacivis.github.io/2015/12/29/20151229_arrayBuffer

TypeArray

原文地址:https://www.cnblogs.com/YMaster/p/13892269.html