在 Node.js 中,缓冲区(Buffer) 是一种专门用于处理 二进制数据流 的结构,特别适用于处理像 TCP 流、文件 I/O、加密、图像处理等需要处理 原始字节数据 的场景。
Buffer 就是 Node.js 提供的用于存储 二进制数据 的容器,不依赖于字符编码,直接操作内存。
在浏览器中,我们操作的大多是字符串(文本数据),而 Node.js 是为服务端设计的,需要高效处理来自文件、网络的数据流,这些数据通常是原始二进制格式。
JavaScript 本身没有处理原始二进制的能力,所以 Node.js 提供了 Buffer
类。
// 创建一个长度为 10 的 Buffer,默认填充为 0
const buf1 = Buffer.alloc(10);
// 使用数组创建 Buffer
const buf2 = Buffer.from([1, 2, 3]);
// 使用字符串创建 Buffer(默认 utf-8 编码)
const buf3 = Buffer.from('Hello');
// 指定编码(如 hex、base64)
const buf4 = Buffer.from('68656c6c6f', 'hex');
const buf = Buffer.alloc(10);
buf.write('abc');
console.log(buf.toString()); // abc
const bufA = Buffer.from('HelloWorld');
const bufB = bufA.slice(0, 5);
console.log(bufB.toString()); // Hello
const a = Buffer.from('123');
const b = Buffer.from('123');
console.log(a.equals(b)); // true
const fs = require('fs');
const data = fs.readFileSync('image.jpg');
console.log(Buffer.isBuffer(data)); // true
const net = require('net');
net.createServer(socket => {
socket.on('data', data => {
console.log('接收到数据:', data); // data 是 Buffer 类型
});
}).listen(8080);
特点 | Buffer | String |
---|---|---|
存储数据类型 | 原始字节(binary) | 字符(Unicode) |
长度单位 | 字节(byte) | 字符(char) |
编码方式 | 可指定编码 | 默认 UTF-16 |
使用场景 | 文件、网络、加密等 | UI、输出等 |
Buffer 是分配在 Node.js 的内存空间中,不在 V8 堆中,所以大型文件或数据可更有效处理。
避免使用 Buffer.allocUnsafe()
,它不会清空内容,可能包含旧数据(安全隐患)。
Buffer 是 Node.js 为了高效处理**原始数据(binary)**而引入的对象,提供了类数组方式对内存的直接操作,是文件、流、网络编程中不可缺少的工具。
如果你想深入了解 Buffer 的底层内存结构 或 高性能文件处理 示例,我可以进一步补充,是否需要?