Buffer 介绍与操作

一、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)); //01101000

(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个字节

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想想aw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值