我在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转换非常简单。
你可以想象,表现相当差。关于如何改进这个的任何建议?
答案 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整除的内容。