HarmonyOS应用开发实战:猫猫大作战-ArrayBuffer 二进制缓冲区

📅 2026/7/30 4:00:39 👁️ 阅读次数 📝 编程学习
HarmonyOS应用开发实战:猫猫大作战-ArrayBuffer 二进制缓冲区

前言

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

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

一、ArrayBuffer 基础

// 创建 40 字节的缓冲区(5×8 棋盘)constbuffer=newArrayBuffer(40);// 获取字节长度console.info(buffer.byteLength);// 40// 通过 TypedArray 读写constview=newInt8Array(buffer);view[0]=1;// 设置第 1 个字节view[1]=2;// 设置第 2 个字节console.info(view[0]);// 1

二、文件读写中的应用

import{fileIo}from'@kit.CoreFileKit';// 从文件读取到 ArrayBufferasyncfunctionreadFileToBuffer(path:string):Promise<ArrayBuffer>{constfile=fileIo.openSync(path,fileIo.OpenMode.READ_ONLY);conststat=fileIo.statSync(path);constbuffer=newArrayBuffer(stat.size);fileIo.readSync(file.fd,buffer);fileIo.closeSync(file);returnbuffer;}// 将 ArrayBuffer 写入文件asyncfunctionwriteBufferToFile(path:string,buffer:ArrayBuffer):Promise<void>{constfile=fileIo.openSync(path,fileIo.OpenMode.CREATE|fileIo.OpenMode.WRITE_ONLY|fileIo.OpenMode.TRUNC);fileIo.writeSync(file.fd,buffer);fileIo.closeSync(file);}

三、与 JSON 配合

// ArrayBuffer → string → JSONconststr=newTextDecoder().decode(buffer);constdata=JSON.parse(str);// JSON → string → ArrayBufferconstjsonStr=JSON.stringify(data);constnewBuffer=newTextEncoder().encode(jsonStr).bufferasArrayBuffer;

四、TypedArray 视图

constbuffer=newArrayBuffer(40);// 不同的 TypedArray 视图constint8=newInt8Array(buffer);// 40 个元素(每个 1 字节)constuint8=newUint8Array(buffer);// 40 个元素constint16=newInt16Array(buffer);// 20 个元素(每个 2 字节)constfloat32=newFloat32Array(buffer);// 10 个元素(每个 4 字节)
TypedArray元素大小元素个数取值范围
Int8Array1 字节40-128~127
Uint8Array1 字节400~255
Int16Array2 字节20-32768~32767
Float32Array4 字节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 参数

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


相关资源:

  • ArrayBuffer MDN 文档
  • 文件 I/O API
  • 第 144 篇:taskpool
  • 第 150 篇:TypedArray