Buffer

Node.js 中处理二进制数据的核心抽象,用于文件、网络、加密等场景。

#type / concept #status / growing #resource / nodejs #resource / javascript

[!info] related notes

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 的区别

特性StringBuffer
编码内部统一 UTF-16可指定编码
二进制操作不直接支持原生支持
内存V8 管理Node 分配的堆外内存
典型用途文本处理文件、网络、加密

最容易误解的点

  • Buffer 不是普通数组,它是 Node 特有的内存分配
  • Buffer.allocBuffer.allocUnsafe 安全但更慢
  • 大文件不要用 fs.readFileSync 一次读成 Buffer,应该用 stream
  • Buffer 和字符串之间的编解码要注意编码格式一致

放回主题图里看

创建于 2026/3/19 更新于 2026/5/27