¿Qué es el objeto ArrayBuffer?, es fácil de entender

Matriz de búfer

ArrayBufferLos objetos son una interfaz para JavaScript para manipular datos binarios. Como especificaciones separadas (publicadas en febrero de 2011), ES6 las incorporó a la especificación ECMAScript. Maneja datos binarios en la sintaxis de una matriz, por lo que se denomina matriz binaria.

Es en este contexto que nacieron las matrices binarias. Permite a los desarrolladores manipular directamente la memoria en forma de subíndices de matriz, lo que mejora en gran medida la capacidad de JavaScript para procesar datos binarios.

Una matriz binaria consta de tres tipos de objetos ArrayBuffer. TypedArrayEn DataViewresumen, los ArrayBufferobjetos representan datos binarios primitivos, las TypedArrayvistas se usan para leer y escribir tipos simples de datos binarios y DataViewlas vistas se usan para leer y escribir tipos complejos de datos binarios.

objeto ArrayBuffer

ArrayBufferUn objeto representa una parte de la memoria que almacena datos binarios. No se puede leer ni escribir directamente, solo se puede leer y escribir a través de vistas ( TypedArrayvistas y DataViewvistas). La función de las vistas es interpretar datos binarios en un formato específico.

ArrayBufferTambién es un constructor que asigna un área de memoria contigua donde se pueden almacenar datos. En un área de memoria de 32 bytes, el valor de cada byte es 0 por defecto. Como puede ver, ArrayBufferel parámetro del constructor es la memoria requerida (bytes).

const buf = new ArrayBuffer(32);
复制代码

DataViewPara crear una vista, debe proporcionar una ArrayBufferinstancia de objeto como parámetro. Cree una DataViewvista, luego lea datos binarios de 8 bits desde el principio en formato de entero de 8 bits sin signo, y el resultado es 0, porque el ArrayBufferobjeto de la memoria sin formato, todos los bits son 0 de forma predeterminada.

const buf = new ArrayBuffer(32);
const dataView = new DataView(buf);
dataView.getUint8(0)
复制代码

TypedArrayUna vista, que DataViewes diferente de una vista, representa un formato de datos diferente, no es un constructor, sino un conjunto de constructores. Entero con signo de 32 bits ( Int32Arrayconstructor) y entero sin signo de 8 bits ( Uint8Arrayconstructor). Dado que las dos vistas corresponden al mismo segmento de memoria, si una vista modifica la memoria subyacente, afectará a la otra vista.

const buffer = new ArrayBuffer(12);
const x1 = new Int32Array(buffer);
x1[0] = 1;
const x2 = new Uint8Array(buffer);
x2[0]  = 2;
x1[0]
复制代码

ArrayBuffer.isView()

ArrayBuffer有一个静态方法isView,返回一个布尔值,表示参数是否为ArrayBuffer的视图实例。这个方法大致相当于判断参数,是否为TypedArray实例或DataView实例。

const buffer = new Int32Array(buffer);
ArrayBuffer.isView(buffer)
复制代码

ArrayBuffer.prototype.slice()

ArrayBuffer实例有一个slice方法,允许将内存区域的一部分,拷贝生成一个新的ArrayBuffer对象。

const buffer = new ArrayBuffer(8);
const newBuffer = buffer.slice(0, 3);
复制代码

slice方法接受两个参数,第一个参数表示拷贝开始的字节序号(含该字节),第二个参数表示拷贝截止的字节序号(不含该字节)。如果省略第二个参数,则默认到原ArrayBuffer对象的结尾。

除了slice方法,ArrayBuffer对象不提供任何直接读写内存的方法,只允许在其上方建立视图,然后通过视图读写。

ArrayBuffer.prototype.byteLength

ArrayBuffer实例的byteLength属性,返回所分配的内存区域的字节长度。

const buffer = new ArrayBuffer(32);
buffer.byteLength
// 32
复制代码

如果要分配的内存区域很大,有可能分配失败(因为没有那么多的连续空余内存),所以有必要检查是否分配成功。

Supongo que te gusta

Origin juejin.im/post/7085635148498075655
Recomendado
Clasificación