将无符号整数数组快速转换为base64

时间:2013-07-12 07:52:55

标签: javascript internet-explorer base64

我在Javascript中有一个包含一组8位无符号整数的VBArray,通常超过1'000'000个。

我可以很容易地将它转换为传统的数组或Uint8Array,我的目标是获得它的base64表示。

我尝试了the methods here,但正在运行

var b64encoded = btoa(String.fromCharCode.apply(null, _uint8Array));

抛出堆栈空间异常。

转换本身不是问题,因为我可以编写自己的转换方法,它执行以下操作

create empty bit string
foreach value in the array
  get binary with toString(2)
  pad the binary to make it 8-bit
  add it to the bit string

Base64转换非常简单。

你可以想象,表现相当差。关于如何改进这个的任何建议?

1 个答案:

答案 0 :(得分:1)

您可以尝试这样的方法来限制参数的数量,从而减少所需的堆栈空间:

var A = new Uint8Array(10000000), s = '';

// Encode at most 49152 bytes at a time
for (var i = 0; i < A.length; i += 49152) {
    s += btoa(String.fromCharCode.apply(null, A.subarray(i, i + 49152)));
}

您可以将数字49152更改为任何低于浏览器限制且可被3整除的内容。