文章配图:ArrayBuffer 二进制缓冲区

页面预览

前言

ArrayBuffer 是 JavaScript/ArkTS 中表示二进制数据缓冲区的对象。与普通 Array 不同,ArrayBuffer 是固定长度的连续内存块,适合存储二进制数据。

在「猫猫大作战」中,ArrayBuffer 用于文件读写网络数据传输和 TypedArray 配合实现棋盘的高效存储

一、ArrayBuffer 基础

// 创建 40 字节的缓冲区(5×8 棋盘)
const buffer = new ArrayBuffer(40);

// 获取字节长度
console.info(buffer.byteLength);  // 40

// 通过 TypedArray 读写
const view = new Int8Array(buffer);
view[0] = 1;    // 设置第 1 个字节
view[1] = 2;    // 设置第 2 个字节
console.info(view[0]);  // 1

二、文件读写中的应用

import { fileIo } from '@kit.CoreFileKit';

// 从文件读取到 ArrayBuffer
async function readFileToBuffer(path: string): Promise<ArrayBuffer> {
  const file = fileIo.openSync(path, fileIo.OpenMode.READ_ONLY);
  const stat = fileIo.statSync(path);
  const buffer = new ArrayBuffer(stat.size);
  fileIo.readSync(file.fd, buffer);
  fileIo.closeSync(file);
  return buffer;
}

// 将 ArrayBuffer 写入文件
async function writeBufferToFile(path: string, buffer: ArrayBuffer): Promise<void> {
  const file = fileIo.openSync(path,
    fileIo.OpenMode.CREATE | fileIo.OpenMode.WRITE_ONLY | fileIo.OpenMode.TRUNC);
  fileIo.writeSync(file.fd, buffer);
  fileIo.closeSync(file);
}

三、与 JSON 配合

// ArrayBuffer → string → JSON
const str = new TextDecoder().decode(buffer);
const data = JSON.parse(str);

// JSON → string → ArrayBuffer
const jsonStr = JSON.stringify(data);
const newBuffer = new TextEncoder().encode(jsonStr).buffer as ArrayBuffer;

四、TypedArray 视图

const buffer = new ArrayBuffer(40);

// 不同的 TypedArray 视图
const int8 = new Int8Array(buffer);      // 40 个元素(每个 1 字节)
const uint8 = new Uint8Array(buffer);     // 40 个元素
const int16 = new Int16Array(buffer);     // 20 个元素(每个 2 字节)
const float32 = new Float32Array(buffer); // 10 个元素(每个 4 字节)
TypedArray 元素大小 元素个数 取值范围
Int8Array 1 字节 40 -128~127
Uint8Array 1 字节 40 0~255
Int16Array 2 字节 20 -32768~32767
Float32Array 4 字节 10 浮点数

五、最佳实践

  1. 定长数据结构用 ArrayBuffer:如棋盘、网格
  2. 配合 TypedArray 读写:ArrayBuffer 不直接操作
  3. 文件 I/O 用 ArrayBuffer:fileIo.readSync/writeSync 接收 ArrayBuffer
  4. 注意字节序:ArrayBuffer 使用小端序

总结

ArrayBuffer 是定长连续内存块,配合 TypedArray 实现高效的二进制数据存储和文件 I/O。核心要点:new ArrayBuffer(size) 创建、 TypedArray 视图读写、 文件 I/O 的 buffer 参数

如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔,你的支持是我持续创作的动力!


相关资源:

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐