1

我在 Javascript 中有一个 VBArray,其中包含一长串 8 位无符号整数,通常超过 1'000'000 个条目。

我可以轻松地将其转换为常规数组或 Uint8Array,我的目标是获得它的 base64 表示。

我已经尝试过这里的方法,但是正在运行

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 转换是微不足道的。

可以想象,性能相当差。关于如何改进这一点的任何建议?

4

1 回答 1

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 整除的任何值。

于 2013-07-12T08:54:24.547 回答