Binary format parsing
Parsing binary protocols or file formats whose fields use specified byte order and numeric widths.
JavaScript · Class
DataView provides low-level, typed access to binary data stored in an ArrayBuffer or SharedArrayBuffer. It supports explicit endianness and arbitrary byte offsets for multi-byte values.
DataView is a low-level view over an ArrayBuffer or SharedArrayBuffer. It lets code read and write different numeric types at chosen byte offsets, explicitly selecting byte order for multi-byte values without requiring alignment.
new DataView(buffer)
new DataView(buffer, byteOffset)
new DataView(buffer, byteOffset, byteLength)| Name | Type | Description |
|---|---|---|
buffer | ArrayBuffer | SharedArrayBuffer | An existing ArrayBuffer or SharedArrayBuffer used as the storage backing the view. |
byteOffset | number | The byte offset at which the view starts; defaults to the beginning of the buffer. |
byteLength | number | The number of bytes covered by the view; defaults to the remaining buffer length. |
A new DataView object representing the specified data buffer.
const buffer = new ArrayBuffer(16);
const view = new DataView(buffer);
view.setUint16(0, 0x1234);
view.setUint16(2, 0x1234, true);
console.log(view.getUint16(0));
console.log(view.getUint16(2, true));Writes and reads the same 16-bit value using big-endian and little-endian byte order.
Parsing binary protocols or file formats whose fields use specified byte order and numeric widths.
Constructing packets or serialized records with precise offsets and representations.
Reading mixed-width fields from a shared memory buffer without copying data.
DataView provides a low-level getter/setter interface for reading and writing multiple numeric types in an ArrayBuffer. Unlike typed arrays, its accessors let code choose byte order for multi-byte values.
Follow-up: Why might DataView be preferable to an Int32Array? It supports explicit endianness and arbitrary byte offsets, whereas typed arrays use the platform's native byte order.
The constructor accepts an ArrayBuffer or SharedArrayBuffer, an optional byte offset, and an optional byte length. The resulting view addresses only the selected byte range.
Follow-up: What happens if the selected range exceeds the buffer? The constructor throws a RangeError when byteOffset plus byteLength is beyond buffer.byteLength.
For multi-byte values, accessor methods take an optional littleEndian argument. A false or omitted argument uses big-endian order; true uses little-endian order.
Follow-up: Can a DataView read unaligned values? Yes; multi-byte values can be accessed from any in-bounds byte offset.
ArrayBufferSharedArrayBufferTypedArrayDataView.prototype.bufferDataView.prototype.byteLengthDataView.prototype.getFloat32()DataView.prototype.getInt8()DataView.prototype.setUint16()