Skip to content

DataView

DataView 视图是一个可以从二进制 ArrayBuffer 对象中读写多种数值类型的底层接口,使用它时,不用考虑不同平台的字节序(endianness)问题。

DataView 与 字节序

  • 多字节的数字格式在内存中的表示方式因机器架构而异(与字节序相关)。
  • DataView 访问器(accessor)提供了对如何访问数据的明确控制,而不管执行代码的计算机的字节序如何。

DataView 64 位整数值

  • 某些浏览器不支持 DataView.prototype.setBigInt64() 和 DataView.prototype.setBigUint64()。因此,要在代码中启用跨浏览器的 64 位操作,你可以实现自己的 getUint64() 函数,以获得精度达到 Number.MAX_SAFE_INTEGER 的值——这对于某些情况足够使用。
  • 如果你需要完整的 64 位的范围,你可以创建 BigInt。此外,尽管原生 BigInt 比等效的用户态的库快得多,但由于其大小可变的性质,BigInt 始终比 JavaScript 中的 32 位整数要慢得多。

构造函数

javascript
new DataView(buffer)
new DataView(buffer, byteOffset)
new DataView(buffer, byteOffset, byteLength)
new DataView(buffer)
new DataView(buffer, byteOffset)
new DataView(buffer, byteOffset, byteLength)
  • 参数
    • buffer: DataView对象的存储的现有ArrayBuffer或SharedArrayBuffer。
    • byteOffset[可选]:缓冲区中第一个字节的偏移量(以字节为单位)。如果未指定,缓冲区视图将从第一个字节开始。
    • byteLength[可选]:字节数组长度。如果未指定,视图的长度将与缓冲区的长度匹配。
javascript
const buffer = new ArrayBuffer(16);
const view = new DataView(buffer, 0);
view.setInt16(1, 42);
view.getInt16(1); // 42
const buffer = new ArrayBuffer(16);
const view = new DataView(buffer, 0);
view.setInt16(1, 42);
view.getInt16(1); // 42

实例属性

DataView.prototype.buffer

  • 描述:描述了在构造时被 DataView 引用的 ArrayBuffer。

DataView.prototype.byteLength

  • 描述:描述了视图从它的 ArrayBuffer 开始的字节长度。

DataView.prototype.byteOffset

  • 描述:描述了从 ArrayBuffer 开始的字节偏移量。

实例方法:

getBigInt64()

  • 描述:从 DataView 开始获取一个指定偏移量的有符号 64 位整数 (long long) 。

get+TypedArray() (10个)

  • 此处的TypedArray是一个具体的实例化对象,它是TypedArray的子类。具体使用查阅文档。

set+TypedArray() (11个)

  • 此处的TypedArray是一个具体的实例化对象,它是TypedArray的子类。具体使用查阅文档。