Buffer
Node.js 中处理二进制数据的核心抽象,用于文件、网络、加密等场景。
#type / concept
#status / growing
#resource / nodejs
#resource / javascript
[!info] related notes
- 所属 MOC: nodejs-moc
- 相关概念: stream, fs
- 前置概念: javascript-in-nodejs
Buffer
Node.js 中处理二进制数据的核心抽象。
一句话定义
Buffer 是一个固定大小的内存块,用于存储和操作二进制数据。
为什么需要 Buffer
浏览器 JS 更偏文本和对象,Node.js 需要处理:
- 文件读写
- 网络数据包
- 图片、音视频
- 压缩解压
- 加密数据
这些都需要直接操作字节。
核心用法
创建
// 从字符串
const buf1 = Buffer.from('hello');
const buf2 = Buffer.from('你好', 'utf8');
// 从数组
const buf3 = Buffer.from([0x48, 0x65, 0x6c, 0x6c, 0x6f]);
// 指定大小(零填充)
const buf4 = Buffer.alloc(1024);
读写
const buf = Buffer.from('hello');
// 转字符串
buf.toString(); // 'hello'
buf.toString('utf8'); // 'hello'
buf.toString('hex'); // '68656c6c6f'
// 读取单个字节
buf[0]; // 104 ('h')
// 写入单个字节
buf[0] = 72;
拼接
const a = Buffer.from('hello');
const b = Buffer.from(' world');
const c = Buffer.concat([a, b]);
c.toString(); // 'hello world'
与 String 的区别
| 特性 | String | Buffer |
|---|---|---|
| 编码 | 内部统一 UTF-16 | 可指定编码 |
| 二进制操作 | 不直接支持 | 原生支持 |
| 内存 | V8 管理 | Node 分配的堆外内存 |
| 典型用途 | 文本处理 | 文件、网络、加密 |
最容易误解的点
- Buffer 不是普通数组,它是 Node 特有的内存分配
Buffer.alloc比Buffer.allocUnsafe安全但更慢- 大文件不要用
fs.readFileSync一次读成 Buffer,应该用 stream - Buffer 和字符串之间的编解码要注意编码格式一致
放回主题图里看
- 流式处理:stream
- 文件系统:fs
- Node 运行时总览:javascript-in-nodejs