当前位置: 首页 > news >正文

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
http://www.jsqmd.com/news/1291385/

相关文章:

  • 基于STM32与串口屏的风洞实验嵌入式测控系统设计与实现
  • 什么是 Loop Engineering?它和 Harness Engineering 有什么不同?
  • OpenClaw智能助手:从零基础到企业级应用的AI工具指南
  • MATLAB条形码识别系统开发与优化指南
  • 西门子PLC SCL编程实战:从梯形图到结构化语言的进阶指南
  • 原子量子计算机:原理、优势与应用场景解析
  • verilog HDLBits刷题[Finite State Machines]“Lemmings2”---Lemmings2
  • 2026年7月五指山优质的浴室柜定制厂家推荐,橱柜/铝合金/铝合金鞋柜/全铝/铝合金房间门,浴室柜定制厂家推荐 - 品牌推荐师
  • Sketch MeaXure:3分钟掌握设计标注自动化,效率提升300%
  • 掌握这 6 个 LangGraph 核心概念,真正理解 AI Agent 工作流
  • 上海GEO优化服务真的能提升网站流量吗?
  • SpringBoot同城二手交易配送系统架构设计与实践
  • C++与OpenCV环境配置及图像处理实战入门指南
  • 2026年7月广西省移动1000M融合宽带怎么选不踩坑_一篇说透 - 找卡家园
  • 3分钟快速上手:Yuedu书源配置终极指南,解锁海量免费小说阅读体验
  • AI Agent落地实战:从架构选型到成本优化的工程指南
  • Python数据分析实战:从数据清洗到可视化呈现的完整行业盈利分析流程
  • 4.1RAG知识库基础
  • 3步完成WSABuilds安装:在Windows 10/11上运行Android应用的最佳方案
  • 2026内江门窗投诉最少推荐榜:良率、安装、售后决定口碑 - 家居装修资讯
  • 工业自动化控制器选型指南:GSV与ACP系列对比
  • QT C++桌面应用开发实战:从登录界面到多窗口跳转的完整指南
  • STM32 ADC与DMA高效数据采集:原理、配置与实战避坑指南
  • STM32标准库工程模板搭建全解析:从零构建稳定可复用的开发环境
  • ppInk:Windows屏幕标注终极解决方案,让你的演示教学效率翻倍
  • LLM与传统检索融合:LIGHTRETRIEVER架构解析
  • FPGA中LFSR的Verilog实现:从原理到实战应用
  • 2026年7月广西省移动1000M融合宽带怎么选_新手避坑指南 - 找卡家园
  • Blender插件开发指南:从用户痛点到高效工作流优化
  • C++字符串拼接性能优化:从基础操作到高效Join实现