HarmonyOS应用开发实战:猫猫大作战-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 | 浮点数 |
五、最佳实践
- 定长数据结构用 ArrayBuffer:如棋盘、网格
- 配合 TypedArray 读写:ArrayBuffer 不直接操作
- 文件 I/O 用 ArrayBuffer:fileIo.readSync/writeSync 接收 ArrayBuffer
- 注意字节序:ArrayBuffer 使用小端序
总结
ArrayBuffer 是定长连续内存块,配合 TypedArray 实现高效的二进制数据存储和文件 I/O。核心要点:new ArrayBuffer(size) 创建、 TypedArray 视图读写、 文件 I/O 的 buffer 参数。
如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔,你的支持是我持续创作的动力!
相关资源:
更多推荐



所有评论(0)