Buffer:Node.js 里处理二进制数据的 “小工具”

1. Buffer 是什么?一句话说清

Buffer 是 Node.js 里类似数组的对象,专门用来存固定长度的字节序列------ 本质就是计算机里的一段内存空间,用来搞定二进制数据的读写。

2. Buffer 的 3 个核心特点

  • 大小固定不能改:创建时就确定长度,后续没法扩容或缩容(比如创建 10 字节的 Buffer,就只能用 10 字节)。
  • 性能好:直接操作计算机内存,比普通数组处理二进制快得多。
  • 每个元素占 1 字节:Buffer 里的每个值范围是 0-255,刚好对应 1 字节(byte)的存储大小。

3. Buffer 实操:创建、转字符串、读写

3.1 3 种创建 Buffer 的方式

Node.js 里创建 Buffer 主要靠 3 个方法,各自有适用场景:

javascript 复制代码
// 1. Buffer.alloc(长度):创建空Buffer,每个字节初始值为0(安全,推荐用)
let buf1 = Buffer.alloc(10); 
console.log(buf1); // 输出:<Buffer 00 00 00 00 00 00 00 00 00 00>(10个0)

// 2. Buffer.allocUnsafe(长度):创建空Buffer,但可能残留旧内存数据(不安全,慎用)
let buf2 = Buffer.allocUnsafe(10); 
console.log(buf2); // 输出可能带随机值,比如<Buffer a3 2f ...>

// 3. Buffer.from(数据):从字符串/数组创建Buffer(最常用)
// 3.1 从字符串创建
let buf3 = Buffer.from('hello'); 
console.log(buf3); // 输出:<Buffer 68 65 6c 6c 6f>(hello的ASCII码)

// 3.2 从数组创建(数组元素是0-255的数字,对应ASCII码)
let buf4 = Buffer.from([105, 108, 111, 118, 101, 121, 111, 117]); 
console.log(buf4); // 输出:<Buffer 69 6c 6f 76 65 79 6f 75>
3.2 Buffer 转字符串:用 toString () 就行

Buffer 存的是二进制,要转成我们能看懂的字符串,直接调用toString(),默认用utf-8编码(不用额外配置):

javascript 复制代码
// 接上面的buf4(数组创建的Buffer)
let str = buf4.toString(); 
console.log(str); // 输出:iloveyou(105是i,108是l,对应起来就是iloveyou)
3.3 Buffer 读写:像操作数组一样用 \[\]

Buffer 支持直接用[]读取或修改元素:

javascript 复制代码
// 先创建一个Buffer:from('hello')
let buf3 = Buffer.from('hello'); 

// 1. 读取:buf[索引],返回的是ASCII码
console.log(buf3[1]); // 输出:101(对应字母e)

// 2. 修改:buf[索引] = 新值(新值必须是0-255的数字)
buf3[1] = 97; // 97是字母a的ASCII码
console.log(buf3.toString()); // 输出:hallo(把e改成a了)

// 【坑】修改值超过255:会舍弃超过8位的二进制(比如256会变成0)
buf3[1] = 256; 
console.log(buf3.toString()); // 输出:hllo(256被当成0,对应空字符)
相关推荐
IT_陈寒35 分钟前
用Vue时这个响应式陷阱坑了我一整天
前端·人工智能·后端
风骏时光牛马43 分钟前
企业客户信息管理数据库
前端
paopaokaka_luck1 小时前
个人综合管理小程序(echarts数据看板、健康数据记录与趋势查看、目标拆解和进度管理、日程待办与番茄钟、习惯打卡、收支统计、个人生活记录、跨模块智能提醒)
前端·javascript·spring·小程序·数据分析·echarts·生活
霸道流氓气质1 小时前
Graph Studio Web IDE 深度实战:可视化编排、断点调试与生产级运维全指南
运维·前端·ide
福兮说9 小时前
前端下载大文件,点了按钮半天没反应:fetch + blob 的三个问题和三种替代写法
前端·javascript·性能优化·文件下载
GreenTea9 小时前
我把 Agent 的 while 循环拆掉了:一种你可能没想到的 Agent 架构
前端·后端·架构
科技观察哨9 小时前
六足平台选型与纳米定位系统集成:HEB-640六自由度位移台在半导体光刻对准中的参数边界与国产替代评估
前端·人工智能
niucloud-admin10 小时前
JAVA V6 多商户商城 开发文档——web前端
前端
颜进强10 小时前
16 · NestJS LifecycleEvents 生命周期事件:五个钩子、三条边界,和 rag-server 的优雅停机
前端·后端·ai编程