Node Buffer

定义

  1. Buffer 中文译为缓冲区,是一个类似于 Array 的对象,用于表示固定长度的字节序列。
  2. Buffer 就是一段固定长度的内存空间,用于处理二进制数据。

特点

  1. Buffer 大小固定且无法调整。
  2. Buffer 性能较好,可以直接对计算机内存进行操作。
  3. 每个元奈的大小为 1字节 (byte)

创建 Buffer

  1. alloc

    1
    2
    let buf = Buffer.alloc(10);		// 分配 10 个字节全新的空间,每一位都是 0
    console.log(buf); // 输出结果:<Buffer 00 00 00 00 00 00 00 00 00 00>
  2. allocUnsafe

    1
    2
    let buf = Buffer.allocUnsafe(10);  // 分配 10 个字节空间,空间原数据不会被清 0 allocUnsafe 比 alloc 快
    console.log(buf); // 输出结果:<Buffer 00 00 00 12 00 fd 00 00 00 00> 每次都不一样
  3. from

    1
    2
    let buf = Buffer.from('Hello');
    console.log(buf); // 输出结果:<Buffer 48 65 6c 6c 6f> 内存中存储每个字符的 16 进制 ASCII 码

其他操作

  1. Buffer 转字符串

    1
    2
    let buf = Buffer.from([72, 101, 108, 108, 111]);		// 每位字符的 10 进制 ASCII 码
    console.log(buf.toString()); // 输出结果:Hello
  2. 读取和修改

    1
    2
    3
    4
    let buf = Buffer.from('Hello');
    console.log(buf[0]); // 输出结果:72
    buf[0] = 65;
    console.log(buf.toString()); // 输出结果:Aello

注意事项

  1. 溢出:每个字节占 8 位二进制空间,若存储的数据大于 8 位,Node 会舍去高位,保留低八位。

    1
    2
    3
    let buf = Buffer.from('Hello');
    buf[0] = 257; // 十进制 257 转二进制:1 0000 0001 实际存储值为: 0000 0001
    console.log(buf); // 输出结果:<Buffer 01 65 6c 6c 6f>
  2. 存储中文:每个中文会根据文件的编码格式进行转换,如 utf-8 将每个汉字转为 3 个字节存储。

    1
    2
    let buf = Buffer.from('你好');
    console.log(buf); // 输出结果:<Buffer e4 bd a0 e5 a5 bd>