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
如果你发现你的学习缺乏动力了,那么你只需要在这里调出这篇博客的一大堆毛病并对作者嗤之以鼻,不断抨击作者直到作者的修改让你满意为止,那么你的动力就自然而来了!