ArrayBuffer、TypedArray、DataView的关系

三者关系

ArrayBuffer是原始的二进制数据缓冲区。
TypedArray是描述一个底层的ArrayBuffer的类数组视图。
DataView视图是可以从ArrayBuffer对象中读写多种数值类型的底层接口。

ArrayBuffer

ArrayBuffer对象用来表示通用的、固定长度的原始二进制数据缓冲区,是一个字节数组。
只能通过TypedArrayDataView来操作其内容。

ArrayBuffer的格式如下:
ArrayBuffer、TypedArray、DataView的关系_第1张图片
通用属性:

  • ArrayBuffer.prototype.byteLength:表示ArrayBufferbyte大小( 字节长度,一个字节 = 8位 ),如上面的例子里,byteLength是8

通用方法:

  • ArrayBuffer.isView(arg):判断参数是否是ArrayBuffer的视图实例,TypedArrayDataView会返回true

实例方法:

  • ArrayBuffer.prototype.slice(begin, end):返回一个新的ArrayBuffer,它的内容是这个从begin开始,end结束(不包括)

TypedArray

TypedArray不是全局属性,只是类型化数组的叫法

TypedArray指的是以下之一:

类型 单个元素值的范围 大小(bytes) 描述
Int8Array -128 ~ 127 1 8位二进制有符号整数
Uint8Array 0 ~ 255 1 8位无符号整数, 超出范围从另一边界循环
Uint8ClampedArray 0 ~ 255 1 8位无符号整数, 超出范围后为边界值
Int16Array -32768 ~ 32767 2 16位二进制有符号整数
Uint16Array 0 ~ 65535 2 16位无符号整数
Int32Array -2147483648 ~ 2147483647 4 32位二进制有符号整数
Uint32Array 0 ~ 4294967295 4 32位无符号整数
Float32Array 1.2×10的-38次方 ~ 3.4×10的38次方 4 32 位 IEEE 浮点数(7 位有效数字,如 1.1234567
Float64Array 5×10的-324次方 ~ 3.4×10的38次方 8 64 位 IEEE 浮点数(16 有效数字,如 1.123…15)

实例参数

  • length:创建实例时,传入了length参数,就会在内存中创建一个数据缓冲区,缓存区大小(byteLength)就是length乘以数组中每个元素的字节数(字节数见上表, 入上图 byteLength = 8 * 4
    TypedArray的数据结构如下:
    ArrayBuffer、TypedArray、DataView的关系_第2张图片

  • typedArray 可以传入任意的类型化数组对象作为参数,typedArray里的每个值先转化为相应类型然后复制到新的数组里。

  • object 效果同TypedArray.from()
    ArrayBuffer、TypedArray、DataView的关系_第3张图片

  • buffer [, byteOffset [, length ] ] 传入buffer参数,创建类型化数组视图,用于呈现ArrayBuffer实例,byteOffsetlength指定了类型化数组视图将要暴露的内存范围。
    ArrayBuffer、TypedArray、DataView的关系_第4张图片
    如上图所示,typedArray2表示的是ArrayBuffer从2开始,2个字节长度的部分。

属性:如上图所示,包括buffer, byteLength, byteOffset, length (都是只读的)
方法:同Array

DataView

DataView视图是可以从二进制ArrayBuffer对象中读写多种数值类型的底层接口,使用它时,不用考虑不同平台的字节序问题。可以看作是一个知道如何读取和写入时正确转换字节码的解释器

语法

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

ArrayBuffer、TypedArray、DataView的关系_第5张图片
方法

  • DataView.prototype.getInt8(byteOffset)DataView起始位置以byte为计数的指定偏移量(byteOffset)处获取一个8-bit数(一个字节)
  • DataView.prototype.getUint8() 获取无符号字节
  • DataView.prototype.getInt16() / getUint16() / getInt32() / getUint32() / getFloat32() / getFloat64()

  • DataView.prototype.setInt8(byteOffset, value) 从DataView起始位置以byte为计数的指定偏移量(byteOffset)处储存一个8-bit数(一个字节)
  • DataView.prototype.setUint8() 无符号字节
  • DataView.prototype.setInt16() / setUint16() / setInt32() / setUint32() / setFloat32() / setFloat64()

示例
在这里插入图片描述

你可能感兴趣的:(js,日常总结)