Skip to content

image-20250116192734411

image-20250116193025866

image-20250116193531852

image-20250116193922619

image-20250116193950237

Buffer(缓冲器)

作者:青见春山
发表于:2026-09-08
字数统计:638 字
预计阅读3分钟

概念

Buffer 是一个类似于数组的 对象 ,用于表示固定长度的字节序列

Buffer 本质是一段内存空间,专门用来处理 二进制数据

image-20230320173023659

特点

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

image-20230320173043532

使用

创建 Buffer

Node.js 中创建 Buffer 的方式主要如下几种:

  1. Buffer.alloc

    这个方法会自动清零,Buffer是内置的

    js
    // 创建了一个长度为 10 字节的 Buffer,相当于申请了 10 字节的内存空间,每个字节的值为 0
    let buf_1 = Buffer.alloc(10); //=>结果为<Buffer 00 00 00 00 00 00 00 00 00 00>
  2. Buffer.allocUnsafe

    js
    // 创建长度为 10 字节且不清零的 Buffer,可能含旧内存数据;读取、返回或写入网络前必须完整覆盖
    let buf_2 = Buffer.allocUnsafe(10);
  3. Buffer.from

    js
    // 通过字符串创建 Buffer
    let buf_3 = Buffer.from("hello");
    // 通过数组创建 Buffer
    let buf_4 = Buffer.from([105, 108, 111, 118, 101, 121, 111, 117]);

    image-20230321005248253

控制台通常用十六进制展示 Buffer 的字节。ASCII 字符的 UTF-8 字节值与 ASCII 码相同;非 ASCII 字符则应按指定字符编码(默认 UTF-8)编码,不能一概解释成“字母 ASCII 转十六进制”。

Buffer 与字符串的转化

我们可以借助 toString 方法将 Buffer 转为字符串

js
let buf_4 = Buffer.from([105, 108, 111, 118, 101, 121, 111, 117]);
console.log(buf_4.toString()); //=>iloveyou

**注意: **toString 默认是按照 utf-8 编码方式进行转换的

Buffer 的读写

Buffer 可以直接通过 [] 的方式对数据进行处理。

js
let buf_3 = Buffer.from("hello");
// 读取
console.log(buf_3[1]); //=>101 十进制
// 修改
buf_3[1] = 97;
//查看字符串结果
console.log(buf_3.toString()); //=>hallo

注意:

  1. 如果修改的数值超过 255 ,则超过 8 位数据会被舍弃
  2. 一个 utf-8 的中文字符 一般 占3个字节

溢出问题 了解即可 用不到

image-20250116221215728

修改

image-20250116221009184

数值的 number.toString(2) 才表示按二进制输出。Buffer.prototype.toString() 的参数是字符编码名(如 "utf8""hex""base64"),传数字 2 不是进制转换。

中文问题:常见 BMP 汉字的 UTF-8 编码通常占 3 字节,但扩展区码点可能占 4 字节,一个用户感知字符也可能由多个码点组成;不要用“中文字数 × 3”计算通用字符串字节数,应使用 Buffer.byteLength(text, "utf8")

image-20250328113223853

计算机基础

cpu,内存,硬盘

image-20250116221713797

image-20250116222046885

image-20250116222425244

进程

进行中的程序

程序的一次执行过程

(任务管理器)

线程

image-20250116222630040

image-20250116222657720