2013-07-12 2 views
1

자바 스크립트에서 길이가 8 비트 부호없는 정수, 일반적으로 1'000'000 항목 이상을 포함하는 VBArray가 있습니다.부호없는 정수의 배열을 base64로 빠르게 변환합니다.

나는 쉽게 기존의 배열이나 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

당신은 따라서 필요한 스택 공간 감소, 인수의 수를 제한하기 위해이 같은 일을 시도 할 수 있습니다 : 당신은 3으로 브라우저의 한계에서 둘 다 아무것도 나눌에 수 49152을 변경할 수 있습니다

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))); 
} 

을 .

+0

니스, 간결. '3로 나눌 수있는'부분은 많은 패딩 FTW에 어려움을 겪을 수있는 디테일입니다. – malber

관련 문제