Описание

Тип DataView — низкоуровневое представление заданного участка ArrayBuffer. Оно позволяет читать и записывать в одни и те же байты целые и вещественные числа разных размеров, явно задавая порядок байтов.

API основан на стандартном DataView, но реализация jCjS имеет отличия: свойство buffer, методы getInt8()/setInt8(), getUint8()/setUint8() и операции Float16 в JavaScript не зарегистрированы.

Назначение

Предназначен для разбора и формирования сетевых пакетов, файловых форматов и других двоичных структур, в которых тип поля и порядок байтов задаются протоколом, а не архитектурой компьютера.



Конструктор

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


Свойства (property)

Сигнатура Описание
uint byteOffset Смещение первого байта представления относительно начала исходного ArrayBuffer. Только чтение.
uint byteLength Количество байтов, доступных через представление. Только чтение.

Общие аргументы методов. offset — неотрицательное смещение в байтах от начала DataView. Если littleEndian равно true, младший байт располагается первым; при false или отсутствии аргумента используется порядок от старшего байта к младшему (big-endian).

В отличие от стандартного DataView, выход за границы представления не создаёт RangeError: операция чтения возвращает нулевое значение соответствующего типа, операция записи игнорируется.


Сигналы

не имеет



Функции

Сигнатура Описание
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.