[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/DataView [Back]  [Original]

DataView - JavaScript | MDN

Esta pgina foi traduzida do ingls pela comunidade. Saiba mais e junte-se comunidade MDN Web Docs.

View in English Always switch to English

DataView

Baseline
Widely available
*

This feature is well established and works across many devices and browser versions. Its been available across browsers since julho de 2015.

* Some parts of this feature may have varying levels of support.

O DataView prov uma interface de baixo nvel para leitura e escrita de mltiplos tipos de nmero em um ArrayBuffer, independentemente da extremidade (endianness) da plataforma.

In this article

Experimente

// Create an ArrayBuffer with a size in bytes
const buffer = new ArrayBuffer(16);

// Create a couple of views
const view1 = new DataView(buffer);
const view2 = new DataView(buffer, 12, 4); // From byte 12 for the next 4 bytes
view1.setInt8(12, 42); // Put 42 in slot 12

console.log(view2.getInt8(0));
// Expected output: 42

Sintaxe

new DataView(buffer [, byteOffset [, byteLength]])

Parmetros

buffer

ArrayBuffer ou SharedArrayBuffer existente para usar como armazenamento de um novo objeto DataView.

byteOffset Optional

A mudana, em bytes, do primeiro byte determinado em um buffer, que ser referenciado pela nova view. Se no for especificado, a view do buffer comear no primeiro byte.

byteLength Optional

O nmero de elementos no array de bytes. Se no especificado, o tamanho da view ser do mesmo tamanho do buffer.

Retorno

Um novo objeto DataView que representa o buffer de dados especificado. (Provavelmente no foi uma descrio muito til.)

Voc pode pensar nesse objeto retornado como um "intrprete" de um array buffer de bytes - ele sabe como converter nmeros para inserir em um buffer corretamente, tanto ao ler quanto ao gravar. Isso significa lidar com converses integer, float, endianness e outros detalhes da representao de nmeros em formato binrio.

Excees

RangeError

Lanado se o byteOffset ou byteLength especificados ultrapassarem o final do buffer.

Por exemplo, se o buffer tem 16 bytes de comprimento, o byteOffset 8 e o byteLength 10, esse erro ser lanado porque a view resultante tenta estender 2 bytes acima do comprimento total do buffer.

Descrio

Endianness

Formatos de nmeros Multi-byte so representados de maneira diferente na memria, dependendo da arquitetura da mquina, veja Endianness para mais informaes. Assessores de DataView fornecem controle explcito de como o dado ser acessado, independente do endianness da arquitetura em execuo.

js
var littleEndian = (function () {
  var buffer = new ArrayBuffer(2);
  new DataView(buffer).setInt16(0, 256, true /* littleEndian */);
  // Int16Array uses the platform's endianness.
  return new Int16Array(buffer)[0] === 256;
})();
console.log(littleEndian); // true or false

Valores inteiros de 64 bits

Como JavaScript atualmente no inclui suporte padro para valores inteiros de 64 bits, DataView no oferece operaes nativas de 64 bits. Como soluo alternativa, voc poderia implementar sua prpria funo getUint64() para obter um valor com a preciso de Number.MAX_SAFE_INTEGER, o que pode ser bom para determinados casos.

js
function getUint64(dataview, byteOffset, littleEndian) {
  // split 64-bit number into two 32-bit (4-byte) parts
  const left = dataview.getUint32(byteOffset, littleEndian);
  const right = dataview.getUint32(byteOffset + 4, littleEndian);

  // combine the two 32-bit values
  const combined = littleEndian
    ? left + 2 ** 32 * right
    : 2 ** 32 * left + right;

  if (!Number.isSafeInteger(combined))
    console.warn(combined, "exceeds MAX_SAFE_INTEGER. Precision may be lost");

  return combined;
}

Como alternativa, se voc precisar de um intervalo completo de 64 bits, poder criar um BigInt.

js
function getUint64BigInt(dataview, byteOffset, littleEndian) {
  // split 64-bit number into two 32-bit (4-byte) parts
  const left = dataview.getUint32(byteOffset, littleEndian);
  const right = dataview.getUint32(byteOffset + 4, littleEndian);

  // combine the two 32-bit values as their hex string representations
  const combined = littleEndian
    ? right.toString(16) + left.toString(16).padStart(8, "0")
    : left.toString(16) + right.toString(16).padStart(8, "0");

  return BigInt(`0x${combined}`);
}

Propriedades

Todas as instncias de DataView herdam DataView e permitem a adio de propriedades a todos os objetos DataView.

Mtodos

Exemplo

js
var buffer = new ArrayBuffer(16);
var dv = new DataView(buffer, 0);

dv.setInt16(1, 42);
dv.getInt16(1); //42

Especificaes

Specification
ECMAScript 2027 LanguageSpecification
# sec-dataview-objects

Compatibilidade com navegadores

Notas de compatibilidade

Comeando com o Firefox 40, DataView deve ser construdo com o operador new . Chamando DataView() como uma funo sem o new, ir lanar um TypeError de agora em diante.

js
var dv = DataView(buffer, 0);
// TypeError: calling a builtin DataView constructor without new is forbidden
js
var dv = new DataView(buffer, 0);

Veja tambm


Web Proxy Viewer  |  New URL  |  Original Page