跳至主要內容

二进制数据、文件

Yang大约 2 分钟

ArrayBuffer

基本的二进制对象,对固定长度的连续内存空间的引用,与其他语言相比,JavaScript 中的二进制数据是以非标准方式实现的

  • 它会分配一个固定字节数的连续内存空间,并用 0 进行预填充
  • 注意:ArrayBuffer 不是某种东西的数组
    • 长度是固定的,无法增加或减少它的长度
    • 正好占用了内存中的那么多空间
    • 要访问单个字节,需要另一个“视图”对象,而不是 buffer[index]
var buffer = new ArrayBuffer(16) // 创建一个长度为 16 的 buffer
console.log(buffer.byteLength)

视图对象

视图对象本身并不存储任何东西,用于解释存储在 ArrayBuffer 中的字节

【相关文章】open in new window

  • Uint8Array:将 ArrayBuffer 中的每个字节视为 0 到 255 之间的单个数字(每个字节是 8 位,因此只能容纳那么多)。这称为 “8 位无符号整数”
  • Uint16Array:将每 2 个字节视为一个 0 到 65535 之间的整数。这称为 “16 位无符号整数”
  • Uint32Array:将每 4 个字节视为一个 0 到 4294967295 之间的整数。这称为 “32 位无符号整数”
  • Float64Array:将每 8 个字节视为一个 5.0x10-3241.8x10308 之间的浮点数
let buffer = new ArrayBuffer(16); // 创建一个长度为 16 的 buffer
let view = new Uint32Array(buffer); // 将 buffer 视为一个 32 位整数的序列
alert(Uint32Array.BYTES_PER_ELEMENT); // 每个整数 4 个字节
alert(view.length); // 4,它存储了 4 个整数
alert(view.byteLength); // 16,字节中的大小

// 写入一个值
view[0] = 123456; // 溢出时会在 0 ~ n 之间循环

// 遍历值
for(let num of view) {
  alert(num); // 123456,然后 0,0,0(一共 4 个值)
}
上次编辑于:
贡献者: sunzhenyang