El objeto DataView

Descubra qué es un objeto DataView y cómo usarlo

DataViewes una vista en unArrayBuffer, me gustaMatrices escritas, pero en este caso los elementos de la matriz pueden tener diferentes tamaños y tipos.

He aquí un ejemplo:

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

Dado que esta es una vista sobre un búfer, podemos especificar desde qué byte queremos comenzar y la longitud:

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

Si no agregamos esos argumentos adicionales, la vista comienza en la posición 0 y carga todos los bytes presentes en el búfer.

Existe un conjunto de métodos que podemos usar para agregar datos al búfer:

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

Así es como llamar a uno de esos métodos:

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

Por defecto, los datos se almacenan usandogran endiannotación. Puede sobrescribir esta configuración y usar little endian agregando un tercer parámetro con eltruevalor:

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

Así es como podemos obtener datos de la vista:

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

Ejemplo:

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

Desde unDataViewes unArrayBufferView, tenemos esas 3 propiedades de solo lectura:

  • bufferapunta al ArrayBuffer original
  • byteOffsetes el desplazamiento en ese búfer
  • byteLengthes la longitud de su contenido en bytes

Una cosa a tener en cuenta es que las matrices escritas no nos permiten controlar el endianness:usa la endianidad del sistema. En general, esto funciona bien, porque el caso de uso principal, como dijimos, es usar la matriz localmente, usando una de las API multimedia.

Si transfiere los datos de un Typed Array en otro sistema, es posible que los datos no estén mal codificados si usa Big Endian y usted usa Little Endian.

En caso de que necesite este tipo de control,DataViewes una elección perfecta.


Más tutoriales de navegador: