Summary
Unless you need the ability to write/edit (using an ArrayBuffer
), then Blob
format is probably best.
Detail
I came to this question from a different html5rocks page., and I found @Bart van Heukelom's comments to be helpful, so I wanted to elevate them to an answer here.
I also found helpful resources specific to ArrayBuffer
and Blob
objects. In summary: despite the emphasis on Blob
being immutable/"raw data" Blob
objects are easy to work with.
Resources that compare / contrast ArrayBuffer
vs Blob
:
- Mutability
- an
ArrayBuffer
can be changed (e.g. with a DataView
)
- a
Blob
is immutable
- Source / Availability in Memory
- An ArrayBuffer is in the memory, available for manipulation.
- A Blob can be on disk, in cache memory, and other places not readily available
- Access Layer
- Convert / Generate
- Use in Other Libraries
jsZip
; (new JSZip()).loadAsync(...)
accepts both ArrayBuffer
and Blob
: String/Array of bytes/ArrayBuffer/Uint8Array/Buffer/Blob/Promise
- How does protocol handle ArrayBuffer vs Blob
- Websocket (aka WS / WSS)
- Use the webSocket's
binaryType
property (could have values "arraybuffer" or "blob") to "control the type of binary data being received over the WebSocket connection."
- XmlHttpRequest (aka XHR)
- Use the xhr's
responseType
property to "to change the expected response type from the server" (valid values include "arraybuffer", "blob", and others like "document", "json", and "text")
-
the response property will contain the entity body according to responseType
, as an ArrayBuffer, Blob, Document, JSON, or string.
Other helpful documentation:
The ArrayBuffer
object is used to represent a generic, fixed-length
raw binary data buffer. You cannot directly manipulate the contents of
an ArrayBuffer
; instead, you create one of the typed array objects or
a DataView
object which represents the buffer in a specific format,
and use that to read and write the contents of the buffer.
A Blob
object represents a file-like object of immutable, raw data.
Blob
represent data that isn't necessarily in a JavaScript-native
format. The File
interface is based on Blob
, inheriting blob
functionality and expanding it to support files on the user's system.
ArrayBuffer
(and its Views such asDataView
and Typed arrays) for binary data,Blob
for binary files. – Gonzalo