数据视图对象的实例介绍

138 阅读2分钟

了解什么是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。

如果你在另一个系统上传输类型数组的数据,如果它使用大端数而你使用小端数,那么数据的编码可能不会太差。

如果你需要这种控制,DataView是一个完美的选择。