Тип DataView — низкоуровневое представление заданного участка ArrayBuffer. Оно позволяет читать и записывать в одни и те же байты целые и вещественные числа разных размеров, явно задавая порядок байтов.
Предназначен для разбора и формирования сетевых пакетов, файловых форматов и других двоичных структур, в которых тип поля и порядок байтов задаются протоколом, а не архитектурой компьютера.
new DataView(buffer[, byteOffset[, byteLength]])
buffer — исходный ArrayBuffer; byteOffset — начало представления относительно начала буфера в байтах;
byteLength — доступная длина в байтах. При нулевой или отсутствующей длине используется остаток буфера.
Смещение аргументов методов get/set отсчитывается уже от начала представления.
Пример взят со страницы DataView на MDN. Вариант jCjS использует синтаксис ES5 и post.log().
var buffer = new ArrayBuffer(16);
var view = new DataView(buffer, 0);
view.setInt16(1, 42);
post.log('' + view.getInt16(1)); // 42
| Сигнатура | Описание |
|---|---|
| uint byteOffset | Смещение первого байта представления относительно начала исходного ArrayBuffer. Только чтение. |
| uint byteLength | Количество байтов, доступных через представление. Только чтение. |
Общие аргументы методов. offset — неотрицательное смещение в байтах от начала DataView. Если littleEndian равно true, младший байт располагается первым; при false или отсутствии аргумента используется порядок от старшего байта к младшему (big-endian).
не имеет
| Сигнатура | Описание |
|---|---|
| Number getInt16(offset[, littleEndian]) | Прочитать знаковое 16-битное целое в диапазоне −32768…32767. |
| void setInt16(offset, value[, littleEndian]) | Записать знаковое 16-битное целое в два байта. |
| Number getUint16(offset[, littleEndian]) | Прочитать беззнаковое 16-битное целое в диапазоне 0…65535. |
| void setUint16(offset, value[, littleEndian]) | Записать беззнаковое 16-битное целое в два байта. |
| Number getInt32(offset[, littleEndian]) | Прочитать знаковое 32-битное целое в диапазоне −2³¹…2³¹−1. |
| void setInt32(offset, value[, littleEndian]) | Записать знаковое 32-битное целое в четыре байта. |
| Number getUint32(offset[, littleEndian]) | Прочитать беззнаковое 32-битное целое в диапазоне 0…2³²−1. |
| void setUint32(offset, value[, littleEndian]) | Записать беззнаковое 32-битное целое в четыре байта. |
| BigInt getBigInt64(offset[, littleEndian]) | Прочитать знаковое 64-битное целое и вернуть объект BigInt jCjS. |
| void setBigInt64(offset, value[, littleEndian]) | Записать знаковое 64-битное значение. В ES5 передавайте BigInt, созданный из десятичной строки, например BigInt("123"); литерал 123n не поддерживается. |
| BigUint getBigUint64(offset[, littleEndian]) | Прочитать беззнаковое 64-битное целое и вернуть объект BigUint jCjS. |
| void setBigUint64(offset, value[, littleEndian]) | Записать беззнаковое 64-битное значение. Для сохранения точности создавайте BigUint из десятичной строки, например BigUint("18446744073709551615"). |
| Number getFloat32(offset[, littleEndian]) | Прочитать 32-битное число с плавающей точкой одинарной точности. |
| void setFloat32(offset, value[, littleEndian]) | Записать число в формате 32-битного float. |
| Number getFloat64(offset[, littleEndian]) | Прочитать 64-битное число с плавающей точкой двойной точности. |
| void setFloat64(offset, value[, littleEndian]) | Записать число в формате 64-битного double. |