Javascript 无符号整数数组到base64的快速转换
我有一个Javascript中的VBArray,它包含一长串8位无符号整数,通常超过1000个条目 我可以轻松地将其转换为常规阵列或Uint8Array,我的目标是获得其base64表示 我试过了,但还是跑了Javascript 无符号整数数组到base64的快速转换,javascript,internet-explorer,base64,Javascript,Internet Explorer,Base64,我有一个Javascript中的VBArray,它包含一长串8位无符号整数,通常超过1000个条目 我可以轻松地将其转换为常规阵列或Uint8Array,我的目标是获得其base64表示 我试过了,但还是跑了 var b64encoded = btoa(String.fromCharCode.apply(null, _uint8Array)); 抛出堆栈外空间异常 转换本身不是问题,因为我可以编写自己的转换方法,它可以执行以下操作 create empty bit string foreach
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转换非常简单
可以想象,性能相当差。关于如何改进的任何建议?您可以尝试以下方法来限制参数的数量,从而减少所需的堆栈空间:
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)));
}
var A=新的Uint8Array(10000000),s='';
//一次最多编码49152字节
对于(变量i=0;i
您可以将数字
49152
更改为低于浏览器限制且可被3整除的任何数字。您可以尝试以下方法来限制参数的数量,从而减少所需的堆栈空间:
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)));
}
var A=新的Uint8Array(10000000),s='';
//一次最多编码49152字节
对于(变量i=0;i
您可以将数字
49152
更改为任何低于浏览器限制且可被3整除的数字。简洁、漂亮。“可被3整除”的部分是一个细节,这会困扰很多人,因为它是简洁的。“可被3整除”部分是一个细节,这会困扰很多FTW