DataView
DataView
视图是一个可以从ArrayBuffer
对象中读写多种数值类型的底层接口,在读写时不用考虑平台字节序问题。
语法
new DataView(buffer [, byteOffset [, byteLength]])
参数
buffer
一个ArrayBuffer
或SharedArrayBuffer
对象,DataView 对象的数据源。byteOffset
可选此 DataView 对象的第一个字节在 buffer中 的偏移。如果不指定则默认从第一个字节开始。byteLength
可选此 DataView 对象的字节长度。如果不指定则默认与 buffer 的长度相同。
返回值
一个由 buffer 生成的 DataView 对象。
异常
RangeError
如果由偏移(byteOffset)和字节长度(byteLength)计算得到的结束位置超出了 buffer 的长度,抛出此异常。
描述
字节序
需要多个字节来表示的数值,在存储时其字节在内存中的相对顺序依据平台架构的不同而不同,参照Endianness。而使用 DataView 的访问函数时不需要考虑平台架构中所使用的是哪种字节序。
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
属性
所有 DataView 实例都继承自 DataView.prototype
,我们也可以向 DataView 对象中添加其他属性。
DataView.prototype.constructor
指定用来生成原型的构造函数.初始化值是标准内置DataView构造器.
DataView.prototype.buffer
只读被视图引入的ArrayBuffer
.创建实例的时候已固化因此是只读的.
DataView.prototype.byteLength
只读从ArrayBuffer
中读取的字节长度. 创建实例的时候已固化因此是只读的.
DataView.prototype.byteOffset
只读从ArrayBuffer
读取时的偏移字节长度. 创建实例的时候已固化因此是只读的.
方法
读
DataView.prototype.getInt8()
从
DataView
起始位置以byte为计数的指定偏移量(byteOffset)处获取一个8-bit数(一个字节).
DataView.prototype.getUint8()
从
DataView
起始位置以byte为计数的指定偏移量(byteOffset)处获取一个8-bit数(无符号字节).
DataView.prototype.getInt16()
从
DataView
起始位置以byte为计数的指定偏移量(byteOffset)处获取一个16-bit数(短整型).
DataView.prototype.getUint16()
从
DataView
起始位置以byte为计数的指定偏移量(byteOffset)处获取一个16-bit数(无符号短整型).
DataView.prototype.getInt32()
从
DataView
起始位置以byte为计数的指定偏移量(byteOffset)处获取一个32-bit数(长整型).
DataView.prototype.getUint32()
从
DataView
起始位置以byte为计数的指定偏移量(byteOffset)处获取一个32-bit数(无符号长整型).
DataView.prototype.getFloat32()
从
DataView
起始位置以byte为计数的指定偏移量(byteOffset)处获取一个32-bit数(浮点型).
DataView.prototype.getFloat64()
从
DataView
起始位置以byte为计数的指定偏移量(byteOffset)处获取一个64-bit数(双精度浮点型).
写
DataView.prototype.setInt8()
从
DataView
起始位置以byte为计数的指定偏移量(byteOffset)处储存一个8-bit数(一个字节).
DataView.prototype.setUint8()
从
DataView
起始位置以byte为计数的指定偏移量(byteOffset)处储存一个8-bit数(无符号字节).
DataView.prototype.setInt16()
从
DataView
起始位置以byte为计数的指定偏移量(byteOffset)处储存一个16-bit数(短整型).
DataView.prototype.setUint16()
从
DataView
起始位置以byte为计数的指定偏移量(byteOffset)处储存一个16-bit数(无符号短整型).
DataView.prototype.setInt32()
从
DataView
起始位置以byte为计数的指定偏移量(byteOffset)处储存一个32-bit数(长整型).
DataView.prototype.setUint32()
从
DataView
起始位置以byte为计数的指定偏移量(byteOffset)处储存一个32-bit数(无符号长整型).
DataView.prototype.setFloat32()
从
DataView
起始位置以byte为计数的指定偏移量(byteOffset)处储存一个32-bit数(浮点型).
DataView.prototype.setFloat64()
从
DataView
起始位置以byte为计数的指定偏移量(byteOffset)处储存一个64-bit数(双精度浮点型).
示例
var buffer = new ArrayBuffer(16);
var dv = new DataView(buffer, 0);
dv.setInt16(1, 42);
dv.getInt16(1); //42
规范
Specification | Status | Comment |
---|---|---|
Typed Array Specification | Obsolete | Superseded by ECMAScript 6 |
ECMAScript 2015 (6th Edition, ECMA-262)The definition of 'DataView' in that specification. | Standard | Initial definition in an ECMA standard |
ECMAScript Latest Draft (ECMA-262)The definition of 'DataView' in that specification. | Draft | |
浏览器兼容性
Feature | Chrome | Edge | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
Basic support | 9.0 | (Yes) | 15.0 (15.0) | 10 | 12.1 | 5.1 |
SharedArrayBuffer | No support | No support | 53 (53) 1 | No support | No support | No support |
Feature | Android | Chrome for Android | Edge | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|---|
Basic support | 4.0 | (Yes) | (Yes) | 15.0 (15) | ? | 12.0 | 4.2 |
SharedArrayBuffer | No support | No support | No support | 53 (53) 1 | No support | No support | No support |
兼容性说明
var dv = DataView(buffer, 0);
// TypeError: calling a builtin DataView constructor without new is forbidden
var dv = new DataView(buffer, 0);
本文档系腾讯云开发者社区成员共同维护,如有问题请联系 cloudcommunity@tencent.com