内置模块 Buffer
约 900 字大约 3 分钟
2025-03-15
一、概念及特点
1、概念
Buffer 是一个类似于数组的 对象 ,用于表示固定长度的字节序列
Buffer 本质是一段内存空间,专门用来处理 二进制数据 。
2、特点
- Buffer 大小固定且无法调整
- Buffer 性能较好,可以直接对计算机内存进行操作
- 每个元素的大小为 1 字节(byte)
二、创建 buffer
Node.js 中创建 Buffer 的方式主要如下几种:
1、Buffer.alloc(size[, fill[, encoding]])
创建一个指定空间长度的buffer
,同时会擦掉其中的旧数据,比较推荐
语法:
Buffer.alloc(size[, fill[, encoding]])
参数描述:
- size: ,新的
Buffer
所需的长度。 - fill: 用于预填充新
Buffer
的值。默认值:0。 - encoding: 如果
fill
是字符串,则这就是它的编码。默认值:utf8
。
返回值:
<Buffer>
代码示例:
// 创建了一个长度为 10 字节的 Buffer
// 相当于申请了 10 字节的内存空间,每个字节的值为 0
let buf_1 = Buffer.alloc(10);
// 结果为 <Buffer 00 00 00 00 00 00 00 00 00 00>
const { Buffer } = require("node:buffer");
const buf = Buffer.alloc(11, "aGVsbG8gd29ybGQ=", "base64");
console.log(buf);
// Prints: <Buffer 68 65 6c 6c 6f 20 77 6f 72 6c 64>
2、Buffer.allocUnsafe
创建一个指定空间长度的buffer
,但是其中可能存在旧数据,处理不好,影响后续代码,容易产生 bug。但是特点是创建效率高
语法:
Buffer.allocUnsafe(size)
参数描述:
- size: 新的
Buffer
所需的长度。
代码示例:
// 创建了一个长度为 10 字节的 Buffer
// buffer 中可能存在旧的数据, 可能会影响执行结果,所以叫unsafe
let buf_2 = Buffer.allocUnsafe(10);
const { Buffer } = require("node:buffer");
const buf = Buffer.allocUnsafe(10);
console.log(buf);
// Prints (contents may vary): <Buffer a0 8b 28 3f 01 00 00 00 50 32>
buf.fill(0);
console.log(buf);
// Prints: <Buffer 00 00 00 00 00 00 00 00 00 00>
3、Buffer.from
特点:可以通过一个数组、字符串或者一个buffer
来创建新的 buffer
,空间指定。
代码示例:
//通过字符串创建 Buffer
let buf_3 = Buffer.from("hello");
//通过数组创建 Buffer
let buf_4 = Buffer.from([105, 108, 111, 118, 101, 121, 111, 117]);
const buf1 = Buffer.from("buffer");
const buf2 = Buffer.from(buf1);
buf1[0] = 0x61;
console.log(buf1.toString());
// Prints: auffer
console.log(buf2.toString());
// Prints: buffer
三、Buffer 读取
1、Buffer.toString
我们可以借助 toString
方法将 Buffer
转为字符串,默认格式是UTF-8
let buf_4 = Buffer.from([105, 108, 111, 118, 101, 121, 111, 117]);
console.log(buf_4.toString());
注意:
- 如果修改的数值超过 255 ,则超过 8 位数据会被舍弃
- 一个 utf-8 的字符 一般 占 3 个字节
2、[ ]
Buffer 可以直接通过 []
的方式对数据进行处理
//读取
console.log(buf_3[1]);
//修改
buf_3[1] = 97;
//查看字符串结果
console.log(buf_3.toString());
四、Buffer 写入
1、[ ]
Buffer 可以直接通过 []
的方式对数据进行处理
//读取
console.log(buf_3[1]);
//修改
buf_3[1] = 97;
//查看字符串结果
console.log(buf_3.toString());
2、Buffer.write
语法:
buf.write(string[, offset[, length]][, encoding])
代码示例
buf = new Buffer(256);
len = buf.write("edu.jb51.net");
console.log("写入字节数 : " + len);
3、Buffer.fill
语法:
buf.fill(value[, offset[, end]][, encoding])
参数说明:
- value 要填充的内容,空值默认填充0.
- offset 开始填充的偏移量,默认值为0;
- end 填充结束的位置。
- encoding 填充的格式,默认值为
utf8
。
返回值:
代码示例:
const b = Buffer.allocUnsafe(50).fill('h');
五、其他方法
Buffer.isBuffer
判断当前对象是否为 Buffer
Buffer.copy
复制一个 buffer
更新日志
2025/8/24 08:17
查看所有更新日志
e7112
-1于