Node.js Buffer 缓冲区
Buffer 是 Node.js 处理二进制数据流的核心对象,类似于整数数组,用于处理 TCP 流、文件操作等。
创建 Buffer
JavaScript
// 指定长度创建
const buf1 = Buffer.alloc(10); // 分配 10 字节,填充 0
const buf2 = Buffer.allocUnsafe(10); // 分配 10 字节,不初始化(更快但可能含旧数据)
// 从字符串创建
const buf3 = Buffer.from('Hello');
const buf4 = Buffer.from('你好', 'utf8');
// 从数组创建
const buf5 = Buffer.from([1, 2, 3, 4, 5]);
Buffer 与字符串转换
JavaScript
const buf = Buffer.from('Hello World');
// 转换为字符串
console.log(buf.toString()); // 'Hello World'
console.log(buf.toString('utf8', 0, 5)); // 'Hello'
// 转换为 JSON
console.log(buf.toJSON());
// { type: 'Buffer', data: [72, 101, 108, 108, 111, ...] }
Buffer 操作
读写数据
JavaScript
const buf = Buffer.alloc(4);
// 写入数据
buf.write('Hi', 0, 'utf8');
// 读取单个字节
console.log(buf[0]); // 72 (H 的 ASCII 码)
console.log(buf[1]); // 105 (i 的 ASCII 码)
拼接 Buffer
JavaScript
const buf1 = Buffer.from('Hello ');
const buf2 = Buffer.from('World');
const buf3 = Buffer.concat([buf1, buf2]);
console.log(buf3.toString()); // 'Hello World'
比较 Buffer
JavaScript
const buf1 = Buffer.from('ABC');
const buf2 = Buffer.from('ABD');
console.log(buf1.compare(buf2)); // -1 (buf1 < buf2)
console.log(buf1.equals(buf2)); // false
常用方法
| 方法 | 说明 |
|---|---|
| Buffer.alloc(size) | 创建指定大小的 Buffer,填充 0 |
| Buffer.from(data) | 从字符串/数组创建 Buffer |
| toString() | 转换为字符串 |
| toJSON() | 转换为 JSON 对象 |
| write(string) | 写入字符串 |
| concat(list) | 拼接多个 Buffer |
| equals(other) | 比较两个 Buffer 是否相等 |
| compare(other) | 比较 Buffer 大小 |
Buffer 的大小在创建时确定,无法动态调整。使用 Buffer.allocUnsafe 性能更高但可能包含敏感数据。
要点总结
- Buffer 用于处理二进制数据,类似于整数数组
- 推荐使用 Buffer.from() 和 Buffer.alloc() 创建 Buffer
- toString() 和 toJSON() 用于转换为其他格式
- Buffer 大小固定,创建后不可更改
📝 发现内容有误?点击此处直接编辑