Node.js 词条目录
前端Wiki/词条/Buffer 二进制数据

Buffer 二进制数据

定义Node 用来存储原始二进制字节的类数组对象,是文件/网络数据处理的最底单位

JS 原生没有二进制字节容器,Node 的 Buffer 填补这个空缺:Buffer.alloc(8) 分配 8 字节、每个下标是一个 0~255 的数字(一个字节)。它类似 Uint8Array(事实上 Buffer 就是 Uint8Array 的子类),但多了 toString/base64、hex 等字符编码方法。文件、网络、加密返回的都是 Buffer 或由它拼接。

典型场景:读图片字节做处理、TCP 数据包拼装、MD5 计算前把字符串转成 Buffer(crypto 的输入是 Buffer/字节)。编码要点:Buffer 不等于字符串——'中文'.length 是 2 但 Buffer.byteLength('中文') 是 6(UTF-8 每个汉字 3 字节)。处理多字节文本用 Buffer.concat 组装再统一 toString,避免半个汉字的乱码。

JavaScript
const fs = require('fs');

// 分配与写入
const buf = Buffer.alloc(4);      // 4 字节,全填 0
buf.write('AB');                  // 写入 ASCII
console.log(buf);                 // <Buffer 41 42 00 00>
console.log(buf.toString());      // "AB"

// 字符串 vs 字节长度
'中文'.length;                      // 2(字符数)
Buffer.byteLength('中文');          // 6(字节数)

// 从文件读取得到 Buffer
const data = fs.readFileSync('a.txt');
console.log(data.length);         // 文件字节数

// 网络数据拼装:先收集块再统一解码
const chunks = [];
process.stdin.on('data', c => chunks.push(c));
process.stdin.on('end', () => {
  const text = Buffer.concat(chunks).toString('utf-8');
  console.log(text);
});
⚠ 常见误区
🔗 相关词条Stream 流Node.js 是什么fs 文件系统
← 返回来源章节Buffer 二进制数据