Javascript 为什么readAsBinaryString()不推荐使用

Javascript 为什么readAsBinaryString()不推荐使用,javascript,w3c,Javascript,W3c,为什么readAsBinaryString()不推荐使用?从 readAsArrayBuffer()的使用优于readAsBinaryString(),后者是为了向后兼容而提供的 readAsBinaryString返回与另一个方法完全不同的东西,那么一个方法怎么能代替另一个呢 在我的具体案例中,我有一个Blob需要转换为base64,有很多方法,但大多数都不节省内存。在我的测试中,从readAsBinaryString调用window.btoa()的结果效果最好。如果我不能再使用它(或者现在让

为什么readAsBinaryString()不推荐使用?从

readAsArrayBuffer()的使用优于readAsBinaryString(),后者是为了向后兼容而提供的

readAsBinaryString返回与另一个方法完全不同的东西,那么一个方法怎么能代替另一个呢

在我的具体案例中,我有一个Blob需要转换为base64,有很多方法,但大多数都不节省内存。在我的测试中,从readAsBinaryString调用window.btoa()的结果效果最好。如果我不能再使用它(或者现在让我们说“应该”),那么我必须使用迭代和字符串串联将数组转换为字符串,这根本就没有内存效率


因此,经过几天的研究,我没有真正找到readAsBinaryString的替代品,这就是问题的原因,或者您是否看到了同样适用于100MB Blob的替代品?

历史是,
readAsBinaryString
在接口存在之前就存在于FileReader API的早期规范中

当ArrayBuffer接口出现时,
readAsBinaryString
已被弃用,因为使用该新接口可以更好地完成其所有用例。
实际上,
readAsBinaryString
只将二进制数据转换为DOMString(UTF-16)。之后你就没什么办法了。此外,将其存储为UTF-16字符串意味着它占用的内存空间远远大于原始数据大小。再加上字符串是不可变的,我想你可以看到从中工作是多么低效。
最后,如果你真的需要这个字符串,你可以在ArrayBuffer上做同样的事情,你只需要在这个ArrayBuffer的Uint8视图上调用
string.fromCharCode

//生成一些二进制数据
document.createElement('canvas').toBlob(blob=>{
const bin_reader=new FileReader();
const arr_reader=new FileReader();
让done=0;
bin_reader.onload=arr_reader.onload=e=>{
如果(++done==2){
const arr_as_bin=[…新的Uint8Array(arr_reader.result)]
.map(v=>String.fromCharCode(v)).join(“”);
log('same results:',arr_as_bin===bin_reader.result);
控制台日志(arr_as_bin);
}
}
bin_reader.readAsBinaryString(blob);
arr_reader.readAsArrayBuffer(blob);

});
您误解了弃用和首选用法之间的区别,但是他们说他们先删除了该函数,然后又添加了它,只是为了向后兼容,所以这意味着他们总有一天会删除它。“虽然软件中保留了不推荐使用的软件功能,但使用该功能可能会发出警告消息,建议替代做法;不推荐使用的状态也可能表示将来将删除该功能。特性被弃用,而不是立即删除,以提供向后兼容性,并给程序员时间使受影响的代码符合新标准。“--Wikipedia很多方法总有一天会被弃用,你只要在它发生时进行调整:)从现在开始,除非你想调整你的代码以使用
ArrayBuffer
,否则这似乎是一个零问题一项小研究揭示了这一点