繁体   English   中英

将 base64 字符串转换为 ArrayBuffer 的有效方法

[英]Efficient way to convert base64 string to ArrayBuffer

给定一个base64字符串,创建ArrayBuffer的最安全和最有效的方法是什么。 特别是纯现代 JavaScript 中的无类型数组缓冲区。

第一个 SO 结果是this question from 2014 接受的答案是

function _base64ToArrayBuffer(base64) {
    var binary_string = window.atob(base64);
    var len = binary_string.length;
    var bytes = new Uint8Array(len);
    for (var i = 0; i < len; i++) {
        bytes[i] = binary_string.charCodeAt(i);
    }
    return bytes.buffer;
}

它已经假定了一种类型,并且有评论表明这并不总是正确的。

这仍然是今天的最佳解决方案吗? 我们是否必须遍历 for 循环中的所有元素? 是否有使用 vanilla JS 的更好、更有效的方法,我们可以在其中传递字符串的blob

一个示例问题是处理作为base64编码字符串提供的GLTF 缓冲区

let str = 'data:application/octet-stream;base64,AAABAAIAAAAAAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAA=';

这有两个单独的标量(无符号短整型)和vec3 (浮点型)数据vec3 ,需要进一步处理。

[编辑]

所以最流行的答案在这里没有用,因为它创建了一个TypedArraybase64字符串中的数据不代表同TypedArray数据集。

由于您的strdata:uri ,您可以使用fetch

 let str = 'data:application/octet-stream;base64,AAABAAIAAAAAAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAA='; fetch(str) .then(b => b.arrayBuffer()) .then(buff => console.log( new Int8Array(buff) /* just for a view purpose */ )) .catch(e => console.log(e))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM