一、Buffer的意思
中文译为缓冲区,是一个类似于Array的对象,用于表示固定长度的字节序列
简言而之,Buffer就是一段固定长度的内存空间,用于处理二进制数据
二、Buffer特点
1.大小固定无法调整
2.性能较好可直接对计算机内存进行操作
3.每个元素大小为1字节
三、Buffer的应用
(1)创建缓冲区
1》alloc
每一个二进制位都会归0
// 创建缓冲区 let buf1=Buffer.alloc(10); console.log(buf1); //<Buffer 00 00 00 00 00 00 00 00 00 00>
讯享网
2》allocUnsafe
不安全,用allocUnsafe创建的Buffer可能会包含旧的内存数据。但是allocUnsafe的速度比alloc要快
讯享网let buf2=Buffer.allocUnsafe(10); console.log(buf2); //<Buffer 00 00 00 00 00 00 00 00 00 00>
(2)写数据到缓冲区
1》write
const buf1=Buffer.alloc(20); var buf2=Buffer.from('Hello world'); buf1.write('天天向上'); console.log(bf1.toString()); //天天向上 // 将数据写入流方法 .write('写入数据的内容','写入数据的开始位置','写入数据的长度') // 注意:“好好学习”有4个字符,每个字符在UTF-8编码中通常占用1到3个字节,所以会出现�这种乱码的情况 buf1.write('好好学习',10,10) console.log(bf1.toString()); //天天向�好好学
(3)读取缓冲区
讯享网buf1.write('天天向上'); console.log(buf1.toString('utf8')); //天天向�好好学 console.log(buf1.toString('utf8',10,13)); //好
buf.toString([encoding[, start[, end]]])
encoding:使用的编码,默认为 'utf8';
start:指定开始读取的索引位置,默认为 0;
end :结束位置,默认为缓冲区的末尾。
(4)缓冲区间的拼接
buf1.write('好好学习'); buf2.write('天天向上'); var buf3=Buffer.concat([buf1,buf2]); console.log(buf3.toString()); //天天向�好好学Hello world
四、Buffer的操作
(1)Buffer与字符串的转化
1》将一个字符串或者数组转为Buffer
Buffer.from()方法
讯享网let buf3=Buffer.from('love'); let buf4=Buffer.from([102,56,98]); console.log(buf3); //<Buffer 6c 6f 76 65> console.log(buf4); //<Buffer 66 38 62>
2》将Buffer转为一个字符串或者数组
toString()方法
//将Buffer转为字符串 let buf4=Buffer.from([105,108,111,118,101,121,111,117]); console.log(buf4.toString()); //iloveyou
(2)Buffer里面对于单个元素的查看 []
获取第一个元素h里面所保存的数据,注意是十进制的表示形式
讯享网let buf=Buffer.from('hello'); console.log(buf[0]); //104 // 获取二进制的表示形式,可在后面加一个toString(2) console.log(buf[0].toString(2)); //0
(3)Buffer里面对于单个元素的修改
console.log(buf); //<Buffer 68 65 6c 6c 6f> buf[0]=95; console.log(buf); //<Buffer 5f 65 6c 6c 6f>
(4)Buffer的溢出与中文 (了解即可)
1》溢出 (舍弃高位的数字)
以let buf=Buffer.from('hello');为例
讯享网//buffer二进制位所能存储的最大数字是255 buf[0]=361; //舍弃高位的数字 所以正常的是0001 0110 1001 变成了 0110 1001 console.log(buf); //<Buffer 69 65 6c 6c 6f>
2》中文
let buf2=Buffer.from('你好'); console.log(buf2); //<Buffer e4 bd a0 e5 a5 bd> //此时结果是6个字节而非两个字节,因为这两个中文是utf-8的中文,一个utf-8的中文一般占3个字节

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/15000.html