如何快速读取本地二进制文件到UInt8Array。以下代码
function readAllBytesAsUInt8Array(path) {
var req = new XMLHttpRequest();
req.open("GET", path, false);
req.overrideMimeType("text/plain; charset=binary-data");
req.send(null);
if (req.status !== 200) {
console.log("error");
return null;
}
var text = req.responseText;
var resultArray = new Uint8Array(text.length);
for(var i = 0; i < text.length;i++){
resultArray[i] = (text[i].charCodeAt() & 255) & 255;
}
return resultArray.buffer;
}var text = req.responseText;在不到1秒的时间内执行,同时这一部分
var resultArray = new Uint8Array(text.length);
for(var i = 0; i < text.length;i++){
resultArray[i] = (text[i].charCodeAt() & 255) & 255;
}对于50 Is的二进制文件,大约需要10秒的时间,有没有一种更快地将二进制文件读取到UInt8Array的方法?
发布于 2017-09-21 07:56:32
您可以将.responseType of XMLHttpRequest()设置为"arraybuffer",然后将ArrayBuffer实例传递给new Uint8Array()。或者,您可以使用fetch()和Response.arrayBuffer()或Worker中的FileReaderSync()将ArrayBuffer传输到主线程,而无需复制ArrayBuffer。
req.responseType = "arraybuffer";
let buffer = req.response;
let u = new Uint8Array(buffer);发布于 2017-09-21 07:48:24
您可以使用TextEncoder!TextEncoder以代码点流作为输入,并发出字节流。
以下是您的新代码:)
function readAllBytesAsUInt8Array(path) {
var req = new XMLHttpRequest();
req.open("GET", path, false);
req.overrideMimeType("text/plain; charset=binary-data");
req.send(null);
if (req.status !== 200) {
console.log("error");
return null;
}
var text = req.responseText;
var encoder = new TextEncoder("utf-8");
var resultArray = encoder.encode(text);
return resultArray.buffer;
}看看那是怎么回事,应该快得多。
https://stackoverflow.com/questions/46338176
复制相似问题