当前位置: 首页 > news >正文

Node.js 中的 Buffer(缓冲区)

下面是关于 Node.js 中的 Buffer(缓冲区) 的系统总结,涵盖了定义、创建、读取修改、溢出处理、中文编码问题以及字符串转换等关键用法👇


🧱 一、什么是 Buffer?

Buffer 是 Node.js 提供的用于处理二进制数据的类。
在浏览器中我们可以使用 BlobArrayBuffer,但 Node 环境下使用 Buffer 更加高效和灵活。

Buffer 主要用于处理文件系统、网络传输中的数据。


✨ 二、创建 Buffer 的几种方式

// 1. 创建一个长度为 10 的 Buffer,初始值为 0
const buf1 = Buffer.alloc(10);// 2. 创建未初始化的 Buffer(更快,但内容是旧数据,需手动填充)
const buf2 = Buffer.allocUnsafe(10);
buf2.fill(0); // 推荐立即填充// 3. 使用数组初始化
const buf3 = Buffer.from([1, 2, 3]);// 4. 使用字符串初始化(可指定编码)
const buf4 = Buffer.from('Hello'); // 默认 utf-8 编码
const buf5 = Buffer.from('你好', 'utf8');

🧪 三、读取和修改 Buffer 内容

const buf = Buffer.from('Node');// 读取字节值(十进制 ASCII)
console.log(buf[0]); // 输出: 78,对应字符 N// 修改值
buf[0] = 100; // 改为字符 d (ASCII 100)
console.log(buf.toString()); // "dode"

🚫 四、Buffer 溢出处理

Buffer 是固定长度的,不能自动扩容,超出会被截断或不生效:

const buf = Buffer.alloc(2);
buf.write('abcd');
console.log(buf.toString()); // 输出 ab,后面 cd 被截断

写入的数据超出长度时,只写入前面的部分。


🌏 五、Buffer 中文乱码问题处理

const buf = Buffer.from('你好', 'utf8');
console.log(buf); // <Buffer e4 bd a0 e5 a5 bd>// 将 Buffer 转回中文字符串
console.log(buf.toString('utf8')); // 你好

⚠️ 中文字符占用多个字节(通常为 3 个),不能随意截取:

const cut = buf.slice(0, 2); // 截取不完整
console.log(cut.toString('utf8')); // 输出乱码

✅ 正确做法:用 iconv-lite 等库做中文切割或保留完整字节。


🔄 六、Buffer 与字符串的互相转换

// 字符串 => Buffer
const str = 'hello';
const buf = Buffer.from(str);// Buffer => 字符串
const newStr = buf.toString('utf8'); // "hello"

编码可以是:utf8asciibase64hexlatin1


🔍 七、实用方法补充

方法说明
buf.length返回字节长度
buf.slice(start, end)截取部分 Buffer
buf.write(str, offset, length, encoding)写入字符串
Buffer.concat([buf1, buf2])合并多个 Buffer
Buffer.isBuffer(obj)判断是否是 Buffer

✅ 总结一句话

Buffer 是 Node 中用于处理二进制数据的核心模块,支持高效的创建、读取、写入和转换,尤其适用于网络传输和文件读写中。


需要我帮你出一个 Buffer 使用的实战示例(比如文件读取、TCP 收包等)也可以告诉我~

相关文章:

  • esp-idf:多语言--lv_i18n
  • 状态模式详解与真实场景案例(Java实现)
  • 人脸检测-人脸关键点-人脸识别-人脸打卡-haar-hog-cnn-ssd-mtcnn-lbph-eigenface-resnet
  • 如何将 ESP32 快速接入高德、心知、和风天气API 获取天气信息
  • void MainWindow::on_btnOutput_clicked()为什么我在QT里面没有connect,也能触发点击效果
  • 【正点原子STM32MP257连载】第四章 ATK-DLMP257B功能测试——RTC时钟测试 #内部RTC时钟 #外部时钟模块AT8563
  • 运维面试题(十四)
  • 常见编码面试问题
  • 命令模式 (Command Pattern)
  • 问题记录(四)——拦截器“失效”?null 还是“null“?
  • 【iOS】OC高级编程 iOS多线程与内存管理阅读笔记——自动引用计数(一)
  • C++ 核心进阶
  • 探秘串口服务器厂家:背后的故事与应用
  • 深入理解Java缓冲输入输出流:性能优化的核心武器
  • 03(总)-docker篇 Dockerfile镜像制作(jdk,jar)与jar包制作成docker容器方式
  • 区块链如何为农业供应链赋能?用 Python 打造透明高效的农产品流通体系
  • Spring Boot 项目的启动流程,图片+文字详细解答(附相关面试题)
  • 进程与线程
  • 如何让Windows开机时自动运行LabVIEW程序
  • 驱动开发硬核特训 · Day 13:从 device_create 到 sysfs,设备文件是如何生成的?
  • 佛山定制建站公司推荐/网站收录查询爱站
  • wordpress小机巧/肇庆百度快照优化
  • 自己人网站建设/seo手机关键词网址
  • 购物网站页面设计/新网站快速收录
  • 做网站都需要哪些技术/太原百度推广排名优化
  • 建建设人才市场官方网站/上海专业seo公司