公司动态
HarmonyOS应用开发实战:猫猫大作战-ArrayBuffer 二进制缓冲区
前言ArrayBuffer是 JavaScript/ArkTS 中表示二进制数据缓冲区的对象。与普通 Array 不同ArrayBuffer 是固定长度的连续内存块适合存储二进制数据。在「猫猫大作战」中ArrayBuffer 用于文件读写、网络数据传输、和 TypedArray 配合实现棋盘的高效存储。一、ArrayBuffer 基础// 创建 40 字节的缓冲区5×8 棋盘constbuffernewArrayBuffer(40);// 获取字节长度console.info(buffer.byteLength);// 40// 通过 TypedArray 读写constviewnewInt8Array(buffer);view[0]1;// 设置第 1 个字节view[1]2;// 设置第 2 个字节console.info(view[0]);// 1二、文件读写中的应用import{fileIo}fromkit.CoreFileKit;// 从文件读取到 ArrayBufferasyncfunctionreadFileToBuffer(path:string):PromiseArrayBuffer{constfilefileIo.openSync(path,fileIo.OpenMode.READ_ONLY);conststatfileIo.statSync(path);constbuffernewArrayBuffer(stat.size);fileIo.readSync(file.fd,buffer);fileIo.closeSync(file);returnbuffer;}// 将 ArrayBuffer 写入文件asyncfunctionwriteBufferToFile(path:string,buffer:ArrayBuffer):Promisevoid{constfilefileIo.openSync(path,fileIo.OpenMode.CREATE|fileIo.OpenMode.WRITE_ONLY|fileIo.OpenMode.TRUNC);fileIo.writeSync(file.fd,buffer);fileIo.closeSync(file);}三、与 JSON 配合// ArrayBuffer → string → JSONconststrnewTextDecoder().decode(buffer);constdataJSON.parse(str);// JSON → string → ArrayBufferconstjsonStrJSON.stringify(data);constnewBuffernewTextEncoder().encode(jsonStr).bufferasArrayBuffer;四、TypedArray 视图constbuffernewArrayBuffer(40);// 不同的 TypedArray 视图constint8newInt8Array(buffer);// 40 个元素每个 1 字节constuint8newUint8Array(buffer);// 40 个元素constint16newInt16Array(buffer);// 20 个元素每个 2 字节constfloat32newFloat32Array(buffer);// 10 个元素每个 4 字节TypedArray元素大小元素个数取值范围Int8Array1 字节40-128~127Uint8Array1 字节400~255Int16Array2 字节20-32768~32767Float32Array4 字节10浮点数五、最佳实践定长数据结构用 ArrayBuffer如棋盘、网格配合 TypedArray 读写ArrayBuffer 不直接操作文件 I/O 用 ArrayBufferfileIo.readSync/writeSync 接收 ArrayBuffer注意字节序ArrayBuffer 使用小端序总结ArrayBuffer 是定长连续内存块配合 TypedArray 实现高效的二进制数据存储和文件 I/O。核心要点new ArrayBuffer(size)创建、TypedArray视图读写、 文件 I/O 的 buffer 参数。如果这篇文章对你有帮助欢迎点赞、收藏⭐、关注你的支持是我持续创作的动力相关资源ArrayBuffer MDN 文档文件 I/O API第 144 篇taskpool第 150 篇TypedArray