文章配图:TypedArray 类型化数组

页面预览

前言

TypedArray(类型化数组)是 JavaScript/ArkTS 中操作二进制缓冲区的高效接口。相比普通 Array,TypedArray 固定元素大小、内存连续、访问速度快,适合棋盘等固定结构的数值存储。

一、TypedArray 基础

// 使用 Int8Array 表示 5×8 棋盘
const boardBuffer = new ArrayBuffer(40);  // 5×8=40 字节
const boardView = new Int8Array(boardBuffer);

// 设置位置 (2,3) 的猫咪等级
boardView[3 * 5 + 2] = CatLevel.MEDIUM;

// 读取
const level = boardView[3 * 5 + 2];

二、TypedArray 类型选择

类型 元素大小 取值范围 适用场景
Int8Array 1 字节 -128~127 猫咪等级(0-6)
Uint8Array 1 字节 0~255 网格状态、标记
Int16Array 2 字节 -32768~32767 得分、连击
Float32Array 4 字节 浮点数 位置、动画插值

三、性能对比

操作 普通 Array Int8Array 提升
内存占用(5×8) ~320 字节 40 字节 8x
访问速度 O(1) O(1) 内存连续
序列化 JSON 直接 buffer 快速

四、游戏中的应用

// 使用 TypedArray 优化棋盘存储
class Board {
  private data: Int8Array;

  constructor() {
    this.data = new Int8Array(5 * 8);
    this.data.fill(0);  // 0 = 空
  }

  get(x: number, y: number): number {
    return this.data[y * 5 + x];
  }

  set(x: number, y: number, level: number): void {
    this.data[y * 5 + x] = level;
  }

  clear(): void {
    this.data.fill(0);
  }
}

五、最佳实践

  1. 固定数据结构用 TypedArray:棋盘、网格
  2. Int8Array 适合等级:0-6 级用 1 字节足够
  3. 配合 ArrayBuffer:序列化时直接取 buffer
  4. 避免频繁创建:复用同一个 TypedArray 实例

总结

TypedArray 提供类型化的二进制缓冲区操作,内存占用低、访问性能好,适合棋盘等固定结构的数值存储。核心要点:new Int8Array(buffer) 视图、 固定元素大小省内存、 直接 buffer 序列化

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


相关资源:

Logo

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

更多推荐