下面是关于 Node.js 中的 Buffer(缓冲区) 的系统总结,涵盖了定义、创建、读取修改、溢出处理、中文编码问题以及字符串转换等关键用法
🧱 一、什么是 Buffer?
Buffer
是 Node.js 提供的用于处理二进制数据的类。
在浏览器中我们可以使用 Blob
或 ArrayBuffer
,但 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"
编码可以是:
utf8
、ascii
、base64
、hex
、latin1
等
七、实用方法补充
方法 | 说明 |
---|---|
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 收包等)也可以告诉我~
到此这篇关于Node.js 中的 Buffer缓冲区实例详解的文章就介绍到这了,更多相关node.js buffer 缓冲区内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
来源链接:https://www.jb51.net/javascript/339782l6o.htm
© 版权声明
本站所有资源来自于网络,仅供学习与参考,请勿用于商业用途,否则产生的一切后果将由您(转载者)自己承担!
如有侵犯您的版权,请及时联系3500663466#qq.com(#换@),我们将第一时间删除本站数据。
如有侵犯您的版权,请及时联系3500663466#qq.com(#换@),我们将第一时间删除本站数据。
THE END
暂无评论内容