将大byteArray转换为wordArray



我需要在我的代码中转换一个大数组(Uint8Array(224337596))。显然,尺寸太大,导致浏览器崩溃。

是否有任何解决办法,也许这在块?

var encrypted = convertUint8ArrayToWordArray(mergedArray)
function convertUint8ArrayToWordArray(u8Array) {
var words = [], i = 0, len = u8Array.length;
while (i < len) {
words.push(
(u8Array[i++] << 24) |
(u8Array[i++] << 16) |
(u8Array[i++] << 8)  |
(u8Array[i++])
);
}
return {
sigBytes: words.length * 4,
words: words
};
}

如果您的浏览器窗口冻结,那么您可以批量异步处理数组。我把这个例子放进了代码片段

function pause() {
return new Promise(r => setTimeout(r, 0))
}
async function convertUint8ArrayToWordArray(u8Array) {
var words = [], i = 0, len = u8Array.length;
while (i < len) {
words.push(
(u8Array[i++] << 24) |
(u8Array[i++] << 16) |
(u8Array[i++] << 8)  |
(u8Array[i++])
);
if (i % 100000 == 0) {
await pause();
}
}
return {
sigBytes: words.length * 4,
words: words
};
}
const bigArray = new Uint8Array(224337596);
for (let idx = 0; idx < bigArray.length; ++idx) {
bigArray[idx] = Math.floor(Math.random() * 256);
}

convertUint8ArrayToWordArray(bigArray).then((res) => {
console.log(res.words[0])
});

最新更新