Javascript快速读取本地文件到UInt8Array

标签 javascript performance io uint8t

如何快速读取本地二进制文件到 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; 执行时间不到一秒,同时这部分

var resultArray = new Uint8Array(text.length);
for(var i = 0; i < text.length;i++){
    resultArray[i] = (text[i].charCodeAt() & 255) & 255;
}

50MB 的二进制文件大约需要 10 秒, 有没有办法更快地将二进制文件读取到 UInt8Array ?

最佳答案

您可以将 XMLHttpRequest().responseType 设置为 "arraybuffer",然后将 ArrayBuffer 实例传递给new Uint8Array()。或者,您可以在 Worker 中使用 fetch()Response.arrayBuffer()FileReaderSync() 来传输ArrayBuffer 到主线程,而不复制 ArrayBuffer

req.responseType = "arraybuffer";
let buffer = req.response;
let u = new Uint8Array(buffer);

关于Javascript快速读取本地文件到UInt8Array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46338176/

相关文章:

javascript - 在 express.js 源代码中传递参数的奇怪方式

sql-server - 高性能 SQL Server 数据库设计资源

Java 子进程额外输出到控制台

java Main < inputfile 不起作用(Main 是一个用于测试 ANTLR 语法的 java 类)

javascript - Cesium - 使用相机缩放多边形以在放大/缩小时匹配经纬度位置

javascript - 尝试映射时,对象作为 React 子对象无效

javascript - 无法将 .js 文件链接到 Joomla。路径错误?

c++ - 采用 N 个参数并返回 N 个值的高性能解决方案

sql-server - 识别 SQL Server 性能问题

java - 在 Java 中将数据从 InputStream 管道传输到 OutputStream