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

JavaScript 中的 ArrayBuffer 和 TypedArray 提供了处理二进制数据的能力,常用于文件操作、网络通信(如 WebSocket)、图像处理或与 WebAssembly 交互等场景。它们让 JS 能像低级语言一样读写内存中的原始字节。
ArrayBuffer 是一个通用的固定长度的二进制数据缓冲区。它本身不能直接读写,必须通过视图(即 TypedArray 或 DataView)来操作。
例如,创建一个 8 字节的缓冲区:const buffer = new ArrayBuffer(8);
此时 buffer 就是一块空的二进制内存空间,无法直接访问内容。
立即学习“Java免费学习笔记(深入)”;
TypedArray 是 ArrayBuffer 的“视图”,提供特定类型的数组接口来读写缓冲区中的数据。常见的类型包括:
用 Uint8Array 操作上面的 buffer:
const view = new Uint8Array(buffer);
view[0] = 42;
view[1] = 255;
这时前两个字节被设置为 42 和 255(每个元素占 1 字节)。
也可以用 Int32Array 来解释同一块内存(每项占 4 字节):
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中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号