Объект DataView

Узнайте, что такое объект DataView и как его использовать

DataViewэто вид наArrayBuffer, подобноТипизированные массивы, но в этом случае элементы в массиве могут иметь разные размеры и типы.

Вот пример:

const buffer = new ArrayBuffer(64)
const view = new DataView(buffer)

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

const view = new DataView(buffer, 10) //start at byte 10
const view = new DataView(buffer, 10, 30) //start at byte 10, and add 30 items

Если мы не добавляем эти дополнительные аргументы, представление начинается с позиции 0 и загружает все байты, присутствующие в буфере.

Существует набор методов, которые мы можем использовать для добавления данных в буфер:

  • setInt8()
  • setInt16()
  • setInt32()
  • setUint8()
  • setUint16()
  • setUint32()
  • setFloat32()
  • setFloat64()

Вот как вызвать один из этих методов:

const buffer = new ArrayBuffer(64)
const view = new DataView(buffer)
view.setInt16(0, 2019)

По умолчанию данные хранятся с использованиемс прямым порядком байтовобозначение. Вы можете перезаписать этот параметр и использовать прямой порядок байтов, добавив третий параметр сtrueценить:

const buffer = new ArrayBuffer(64)
const view = new DataView(buffer)
view.setInt16(0, 2019, true)

Вот как мы можем получить данные из представления:

  • getInt8()
  • getInt16()
  • getInt32()
  • getUint8()
  • getUint16()
  • getUint32()
  • getFloat32()
  • getFloat64()

Пример:

const buffer = new ArrayBuffer(64)
const view = new DataView(buffer)
view.setInt16(0, 2019)
view.getInt16(0) //2019

ПосколькуDataViewявляетсяArrayBufferView, у нас есть эти 3 свойства только для чтения:

  • bufferуказывает на исходный ArrayBuffer
  • byteOffsetэто смещение в этом буфере
  • byteLengthдлина его содержимого в байтах

Следует иметь в виду, что типизированные массивы не позволяют нам контролировать порядок байтов:он использует порядок байтов системы. В общем, это работает нормально, потому что основной вариант использования, как мы уже сказали, - использовать массив локально, используя один из мультимедийных API.

Если вы переносите данные типизированного массива в другую систему, данные могут быть закодированы неплохо, если используется метод Big Endian, а вы используете Little Endian.

Если вам нужен такой контроль,DataViewидеальный выбор.

Скачать мою бесплатнуюРуководство для начинающих по JavaScript


Больше руководств по браузеру: