了解什么是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指向原始ArrayBufferbyteOffset是该缓冲区的偏移量byteLength是其内容的长度,单位是字节
有一点需要注意的是,类型化的数组并不能让我们控制字节数:它使用系统的字节数。一般来说,这样做很好,因为正如我们所说的,主要的使用情况是在本地使用数组,使用其中的一个多媒体API。
如果你在另一个系统上传输类型数组的数据,如果它使用大端数而你使用小端数,那么数据的编码可能不会太差。
如果你需要这种控制,DataView是一个完美的选择。