JavaScript 中的类型化数组和 ArrayBuffer

128 阅读2分钟

引言

在 JavaScript 中,类型化数组(Typed Arrays)和 ArrayBuffer 提供了一种高效处理二进制数据的方式。本文将介绍 Float32ArrayArrayBuffer,并对比它们的相似之处和不同之处。

ArrayBuffer

ArrayBuffer 是一个通用的、固定长度的二进制数据缓冲区对象。它提供了预分配内存空间的方法,但不能直接操作数据。以下是关于 ArrayBuffer 的一些基本信息:

const buffer = new ArrayBuffer(16); // 创建一个包含 16 字节的 ArrayBuffer
console.log(buffer.byteLength); // 输出 16

Float32Array

Float32ArrayArrayBuffer 的一种视图,用于以 32 位浮点数的格式解释 ArrayBuffer 中的数据。以下是关于 Float32Array 的一些基本信息:

const buffer = new ArrayBuffer(16);
const float32Array = new Float32Array(buffer);
float32Array[0] = 3.14;

相似之处

  • 两者都有 length 属性,用于获取数组的长度。
  • 可以使用索引访问数组中的元素。

不同之处

  • Float32Array 存储的是 32 位浮点数,而普通的 Array 可以容纳各种类型的数据。
  • 创建时的参数不同,Float32Array 需要传递一个长度或者一个现有的数组,而普通的 Array 可以传递任意数量的元素。
  • Float32Array 提供了直接操作底层二进制数据的方法,而 Array 没有这个能力。
  • ArrayBuffer 本身不能直接读取或写入数据,而 Float32Array 则提供了一种以特定数据格式来操作这些内存的高级接口。

其他类型化数组和相关对象

除了 Float32ArrayArrayBuffer,JavaScript 还提供了其他类型化数组和相关的对象,用于满足不同数据格式和需求的操作:

  • Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array, BigInt64Array, BigUint64Array:存储不同类型的数值或整数。
  • DataView:提供更灵活的方式来读写 ArrayBuffer 中的数据。
  • SharedArrayBuffer:允许多个 Web Workers 共享同一块内存。

这些类型化数组和相关的缓冲区对象都是用于处理和操作二进制数据的,提供了不同的视图和方式来操作底层的二进制数据。

感谢阅读! 内容又chatgpt由对话整理而来