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,避免半个汉字的乱码。
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); });