我正在阅读http://www.html5rocks.com/en/tutorials/file/xhr2/并尝试找出ArrayBuffer和Blob之间的区别。
两个容器都不是由比特组成的吗?因此,不能以多种方式查看两个容器(如32位块,16位块等)?
答案 0 :(得分:27)
<强>摘要强>
除非您需要能够编写/编辑(使用ArrayBuffer
),否则Blob
格式可能是最佳格式。
<强>详细强>
我从different html5rocks page.发现了这个问题,我发现@Bart van Heukelom's comments有帮助,所以我想在这里提升答案。
我还发现查找特定于ArrayBuffer
和Blob
对象的资源很有帮助。我强调重申我正在寻找的有用细节。总结:尽管强调Blob
是“原始数据”,但非常可行 。
与我想强调的文档的区别:
- ArrayBuffer在内存中,可用进行操作。
- Blob可以位于磁盘,缓存和其他地方不可用
window.URL.createObjectURL
等其他函数,如OP's URL中的示例所示。 FileReader
等文件相关的API来处理blob。 FileReader
's readAsArrayBuffer
method new Blob([new Uint8Array(data)]);
,如图所示
this answer 以下是帮助我的文档详细信息:
ArrayBuffer对象用于表示通用的固定长度 原始二进制数据缓冲区你不能直接操纵内容 一个ArrayBuffer;相反,您创建一个类型化的数组对象或 一个DataView对象,它表示特定格式的缓冲区, 并且使用它来读取和写入缓冲区的内容。
Blob对象表示不可变原始数据的类文件对象。 Blob表示不一定是JavaScript本机的数据 格式。文件界面基于Blob,继承blob 功能并将其扩展为支持用户系统上的文件。
答案 1 :(得分:16)
在页面上对此进行了解释。
ArrayBuffer
ArrayBuffer是二进制数据的通用固定长度容器。如果您需要原始数据的通用缓冲区,它们非常方便,但这些人背后的真正力量是您可以使用JavaScript类型数组创建基础数据的“视图”。实际上,可以从单个ArrayBuffer源创建多个视图。例如,您可以创建一个8位整数数组,该数组与来自相同数据的现有32位整数数组共享相同的ArrayBuffer。基础数据保持不变,我们只是创建它的不同表示。
BLOB
如果您想直接使用Blob和/或不需要操作任何文件的字节,请使用xhr.responseType ='blob':