Buffer缓冲器
Buffer缓冲器是什么
实例化buffer对象
定义buffer对象的长度
方法一:new Buffer(长度)
let buf = new Buffer(5);
console.log(buf)
//<Buffer 00 00 00 00 00>
该方法不推荐使用。
方法二:
let buf = Buffer.alloc(5)
console.log(buf)
//<Buffer 00 00 00 00 00>
<Buffer 00 00 00 00 00>,返回16进制的结果,并且该结果是随机产生的。
Buffer.from(array)
使用 0 – 255 范围内的字节数组 array 来分配一个新的 Buffer。 超出该范围的数组条目会被截断以适合它。
let buf = Buffer.from('hello')
console.log(buf)
//<Buffer 68 65 6c 6c 6f>
同时可以通过toString方法将16进制数转化为字符串
let buf1 = Buffer.from([0x68,0x65,0x6c,0x6c,0x6f])
console.log(buf1.toString())
// hello
由此可以看出返回值省略了0x前缀。
Buffer功能方法
1.Buffer.isEncoding():判断是否支持该编码格式
console.log(Buffer.isEncoding('utf8'))
console.log(Buffer.isEncoding('ucs2'))
支持的编码格式有:
hex
utf8
ascii
binary
base64
ucs2
ucs-2
utf16le
utf-16le
raw
2.Buffer.isBuffer():判断是否为Buffer
let buf = Buffer.from('loop')
let str = 'hello';
console.log(Buffer.isBuffer(buf)) //true
console.log(Buffer.isBuffer(str)) //false
3.Buffer.byteLength():返回执行编码的字节长度,默认编码格式为utf-8.
let buf = Buffer.from('loop')
let buf1 = Buffer.from('我爱我家')
console.log(Buffer.byteLength(buf)) // 4
console.log(Buffer.byteLength(buf1)) // 12
由此可见utf-8编码格式下,一个字母对应一个字节,一个汉字对应三个字节。但可以通过改变编码格式来改变输出。
let buf1 = Buffer.from('我爱我家','ascii')
console.log(Buffer.byteLength(buf1)) // 4
console.log(buf1.toString()) //1�
在使用ascii码后,一个汉字对应一个字节,但是将其转化为字符串后,会出现乱码。所以对于汉字来说,不支持ASCii码,因此在写前端或后台接口返回数据时要规定返回格式为utf-8,只有这种格式允许对汉字进行编码。
4.Buffer.concat():将一组Buffe对象合并为一个Buffer对象。
let buf1 = Buffer.from('hello ');
let buf2 = Buffer.from('world');
let buf3 = Buffer.concat([buf1,buf2]);
console.log(buf3.toString())
//hello world
5.Buffer.write(str,offset,integer):将str按要求写入buf对象
offset为开始写入前要跳过的字节数;
integer为要写入的最大字节数(最大为str.length-offset)
let buf = Buffer.alloc(5)
let buf1 = Buffer.alloc(5)
let buf2 = Buffer.alloc(5)
buf.write('hello',2,3)
buf1.write('hello',2,5)
buf2.write('hello',2,2)
console.log(buf.toString()) // hel
console.log(buf1.toString()) // hel
console.log(buf2.toString()) //he
如果integer的值大于length-offset,则还是会按照最大值进行写入。
注意事项
let buf = Buffer.from('hello')
let buf1 = buf.slice();
console.log(buf1.toString()) //hello
console.log(buf==buf1) //false
比较的并不是hello,而是这两个在内存中的地址。只要是对象,存储的地址不同
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具