首页 > web前端 > js教程 > 正文

如何利用JavaScript的ArrayBuffer和TypedArray处理二进制数据?

夢幻星辰
发布: 2025-09-27 14:28:02
原创
261人浏览过
ArrayBuffer是固定长度的二进制数据缓冲区,需通过TypedArray或DataView等视图操作;TypedArray提供特定类型的数据视图,如Uint8Array、Int32Array等,可读写ArrayBuffer中的数据,多个视图共享同一缓冲区会相互影响;常用于文件操作、网络通信、图像处理等场景,处理原始字节流时需注意字节序问题,推荐使用DataView进行精确控制。

如何利用javascript的arraybuffer和typedarray处理二进制数据?

JavaScript 中的 ArrayBufferTypedArray 提供了处理二进制数据的能力,常用于文件操作、网络通信(如 WebSocket)、图像处理或与 WebAssembly 交互等场景。它们让 JS 能像低级语言一样读写内存中的原始字节

理解 ArrayBuffer

ArrayBuffer 是一个通用的固定长度的二进制数据缓冲区。它本身不能直接读写,必须通过视图(即 TypedArray 或 DataView)来操作。

例如,创建一个 8 字节的缓冲区:

const buffer = new ArrayBuffer(8);

此时 buffer 就是一块空的二进制内存空间,无法直接访问内容。

立即学习Java免费学习笔记(深入)”;

使用 TypedArray 操作数据

TypedArray 是 ArrayBuffer 的“视图”,提供特定类型的数组接口来读写缓冲区中的数据。常见的类型包括:

  • Int8Array:8 位有符号整数
  • Uint8Array:8 位无符号整数
  • Int16Array:16 位有符号整数
  • Uint16Array:16 位无符号整数
  • Int32Array:32 位有符号整数
  • Float32Array:32 位浮点数
  • Float64Array:64 位浮点数

用 Uint8Array 操作上面的 buffer:

const view = new Uint8Array(buffer);
view[0] = 42;
view[1] = 255;

这时前两个字节被设置为 42 和 255(每个元素占 1 字节)。

也可以用 Int32Array 来解释同一块内存(每项占 4 字节):

宣小二
宣小二

宣小二:媒体发稿平台,自媒体发稿平台,短视频矩阵发布平台,基于AI驱动的企业自助式投放平台。

宣小二 21
查看详情 宣小二

const intView = new Int32Array(buffer);
intView[0] = 1; // 写入一个 32 位整数

注意:多个视图可以共享同一个 ArrayBuffer,修改一个会影响其他视图。

实际应用示例

常见用途是处理从网络或文件读取的原始数据。比如从 Blob 创建 ArrayBuffer:

file.arrayBuffer().then(buffer => {
  const bytes = new Uint8Array(buffer);
  // 处理字节流,比如解析文件头
  if (bytes[0] === 0x89 && bytes[1] === 0x50) {
    console.log("这是一个 PNG 文件");
  }
});

又或者将字符串转为 UTF-8 字节:

function stringToBytes(str) {
  const encoder = new TextEncoder();
  return encoder.encode(str); // 返回 Uint8Array
}

再反过来解析字节为字符串:

function bytesToString(bytes) {
  const decoder = new TextDecoder('utf-8');
  return decoder.decode(bytes);
}

注意字节序问题

如果需要精确控制多字节数据的读写顺序(比如网络协议),建议使用 DataView,它允许指定字节序(小端或大端):

const dataView = new DataView(buffer);
dataView.setUint16(0, 256, true); // 在偏移 0 处写入 16 位整数,true 表示小端

const value = dataView.getUint16(0, true); // 读取

基本上就这些。ArrayBuffer 配合 TypedArray 让 JavaScript 能高效安全地处理底层二进制数据,关键是理解“缓冲区”和“视图”的分离设计。不复杂但容易忽略细节,比如共享内存带来的副作用。

以上就是如何利用JavaScript的ArrayBuffer和TypedArray处理二进制数据?的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门推荐
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号