将ArrayBuffer转换为Array,反之亦然

时间:2014-10-29 07:43:30

标签: javascript arrays json multithreading

我正在使用Parallel.js和Q.js实现"多线程"进入我的申请。因为我只能将可序列化的对象传递给Parallel.js,我需要传递一个ArrayBuffer,我将ArrayBuffer转换为Uint8Array作为JSON对象,使用此JSON.stringify(new Uint8Array(bytes)),然后在Parallel.js中将JSON对象转换为对象,然后尝试Uint8Array,然后尝试像这样的缓冲区

var object = JSON.parse(data[0]);
var bytes = new Uint8Array(Object.keys(object).map(function(k) { return object[k]}));
var buffer = bytes.buffer;

这通常应该有效,因为Uint8Array有一个名为buffer的原型,但缓冲区总是未定义的。对象和字节是正确的,当我看一下字节的原型buffer时,我可以看到这条消息:[Exception: TypeError: Method Uint8Array.buffer called on incompatible receiver #<Uint8Array>]而且我真的不知道应该如何解决这个问题。

有人知道修复吗?

1 个答案:

答案 0 :(得分:0)

虽然我不确定为什么这样做不起作用,但您可以将值转换为Base64,反之亦然,如here所述:

// encode
var str = base64EncArr(new Uint8Array(4)); // "AAAAAA=="
// decode
var arr = base64DecToArr("AAAAAA=="); // [0, 0, 0, 0]