ArrayBuffer和Blob有什么区别?

dan*_*007 51 javascript html5

我正在阅读http://www.html5rocks.com/en/tutorials/file/xhr2/并尝试找出ArrayBuffer和Blob之间的区别.

两个容器都不是由比特组成的吗?因此,不能以多种方式查看两个容器(如32位块,16位块等)?

The*_*Pea 42

摘要

除非你需要能够编写/编辑(使用ArrayBuffer),否则Blob格式可能是最好的.

详情

我从另一个 html5rocks页面来到这个问题.,我发现@Bart van Heukelom的评论很有帮助,所以我想把它们提升到一个答案.

我还发现它有助于找到特定的资源ArrayBufferBlob对象.我强调重申我正在寻找的有用细节.总结:尽管强调Blob "原始数据",但它非常可行.

与我想强调的文档的不同之处在于:

以下是帮助我的文档详细信息:

这是ArrayBuffer

ArrayBuffer对象用于表示通用的固定长度原始二进制数据缓冲区.你不能直接操纵ArrayBuffer的内容; 相反,您创建一个类型化数组对象或一个DataView对象,它表示特定格式的缓冲区,并使用它来读取和写入缓冲区的内容.

这是Blob

Blob对象表示不可变的原始数据的类文件对象.Blob表示不一定采用JavaScript本机格式的数据.File 接口基于Blob,继承blob功能并将其扩展为支持用户系统上的文件.

  • 正如我刚刚发现,当我从 websocket 得到二进制响应时,你会在那里得到一个 Blob——而 Blob 的缺点似乎是**你甚至无法读取它**。这只是一个把手。我需要从那个 blob 中获取几个字节。您需要创建一个 `FileReader`,请参阅 [“从 Blob 中提取数据的示例”](https://developer.mozilla.org/en/docs/Web/API/Blob) - 它添加了另一个异步函数在您可以访问 Blob 中的任何内容之前。 (2认同)
  • “Blob 可以变成”不,正如你之前所说,它是不可变的,所以它不能变成任何东西。您可以从 Blob 生成 ArrayBuffer,或者从 ArrayBuffer 生成 Blob,但在这两种情况下,您都会复制数据,不会变成其他数据。 (2认同)

Hal*_*yon 19

它在页面上解释.

ArrayBuffer

ArrayBuffer是二进制数据的通用固定长度容器.如果您需要原始数据的通用缓冲区,它们非常方便,但这些人背后的真正力量是您可以使用JavaScript类型数组创建基础数据的"视图".实际上,可以从单个ArrayBuffer源创建多个视图.例如,您可以创建一个8位整数数组,该数组与来自相同数据的现有32位整数数组共享相同的ArrayBuffer.基础数据保持不变,我们只是创建它的不同表示.

BLOB

如果您想直接使用Blob和/或不需要操作任何文件的字节,请使用xhr.responseType ='blob':

  • ArrayBuffer位于内存中,可供操作.Blob可以位于磁盘,高速缓存存储器以及其他不易获得的位置.但是Blob中的数据可以复制到ArrayBuffer中. (14认同)
  • 说实话,仍然不清楚.你是什​​么意思"BLOB可以是什么?".它不仅仅是一个字节序列,就像ArrayBuffer一样吗? (12认同)
  • “Blob”的解释:如果你想直接使用 Blob,那么......这称为递归解释 (2认同)