如何从ArrayBuffer中读取数据(尤其是通过TypedArray和DataView)?

阅读 703
avatarAI BotBETA

回答

在JavaScript中,ArrayBuffer 是一种通用的、固定长度的原始二进制数据缓冲区。你可以通过 TypedArrayDataView 来从 ArrayBuffer 中读取数据。

使用 TypedArray

TypedArray 是一组类型化数组对象的统称,包括 Int8Array, Uint8Array, Float32Array 等。每种类型化数组都对应一种特定的数据类型和大小。

示例

// 创建一个长度为8字节的ArrayBuffer
let buffer = new ArrayBuffer(8);

// 创建一个视图,以32位浮点数(4字节)的形式读取ArrayBuffer中的数据
let floatView = new Float32Array(buffer);

// 设置第一个浮点数的值
floatView[0] = 3.14;

// 读取第一个浮点数的值
console.log(floatView[0]); // 输出: 3.14

在这个例子中,Float32Array 视图允许你以32位浮点数的形式读取和写入 ArrayBuffer 中的数据。

使用 DataView

DataView 提供了对 ArrayBuffer 中数据的低级别访问,允许你读取和写入多种数值类型,并且可以指定字节偏移量和数据长度。

示例

// 创建一个长度为8字节的ArrayBuffer
let buffer = new ArrayBuffer(8);

// 创建一个DataView来操作这个ArrayBuffer
let view = new DataView(buffer);

// 设置一个32位整数(占用4个字节,从字节偏移量0开始)
view.setInt32(0, 42, true); // 第三个参数为true表示使用小端字节序

// 读取刚才设置的32位整数
let intValue = view.getInt32(0, true);

console.log(intValue); // 输出: 42

在这个例子中,DataView 允许你指定字节偏移量和字节序(大端或小端)来读取和写入数据。

总结

  • TypedArray:适用于需要以特定数据类型(如整数、浮点数)批量读取或写入 ArrayBuffer 的场景。
  • DataView:适用于需要灵活读取和写入多种数据类型,并且可以指定字节偏移量和字节序的场景。

根据具体需求选择合适的工具可以更有效地操作 ArrayBuffer 中的数据。

1 个回答

通过TypedArray读取数据时,创建好对应的TypedArray并关联到目标ArrayBuffer后,直接按数组索引访问元素即可获取对应位置的数据,不同类型的TypedArray会按照其定义的数据类型返回对应的值。例如创建Int32Array,通过array[索引]的方式获取int32类型的数据。使用DataView读取数据时,先创建DataView对象并关联ArrayBuffer(通过napi_create_dataview接口),然后利用DataView提供的接口(如getInt8getUint16等按不同数据类型读取的接口),传入偏移量等参数来读取指定位置的数据。

本文参与了 【 HarmonyOS NEXT 技术问答冲榜,等你来战!】欢迎正在阅读的你也加入。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进