The Buffer
docs are very enlightening:
Prior to the introduction of TypedArray
, the JavaScript language had no mechanism for reading or manipulating streams of binary data. The Buffer
class was introduced as part of the Node.js API to enable interaction with octet streams in TCP streams, file system operations, and other contexts.
With TypedArray
now available, the Buffer
class implements the Uint8Array
API in a manner that is more optimized and suitable for Node.js.
…
Buffer instances are also Uint8Array
instances. However, there are subtle incompatibilities with TypedArray
. For example, while ArrayBuffer#slice()
creates a copy of the slice, the implementation of Buffer#slice()
creates a view over the existing Buffer
without copying, making Buffer#slice()
far more efficient.
It is also possible to create new TypedArray instances from a Buffer with the following caveats:
The Buffer
object's memory is copied to the TypedArray
, not shared.
The Buffer
object's memory is interpreted as an array of distinct elements, and not as a byte array of the target type. That is, new Uint32Array(Buffer.from([1, 2, 3, 4]))
creates a 4-element Uint32Array
with elements [1, 2, 3, 4]
, not a Uint32Array
with a single element [0x1020304]
or [0x4030201]
.
They go on to mention TypedArray.from
, which in node accepts Buffer
s, so the 'correct' way is:
var arrByte = Uint8Array.from(data)
...however, this shouldn't be necessary at all since a Buffer
is a Uint8Array
and new UintArray(someBuffer)
does work just fine.
There's also no context in your question, but Blob
doesn't exist in node, and you shouldn't need it anyway, since Buffer
already gives you raw access to binary data and the other fs
methods let you read and write files.