Buffer简述

 

什么是Buffer?

Buffer简单的来说就如它的字面意思一样是一块缓冲区,就跟火车票售票厅一样,售票厅可以容下一定的人(一旦修建好售票厅,售票厅容量无法更改) , 而售票厅里的人有进有出。不过Buffer里面的人是字节,众所周知一个字节的大小是2^8,但是Buffer用2位16进制的数代替(如31表示3*16+1=49),字节的数代表ascii码字符值(如49代表'1'); 主要用于处理二进制数据(2位的16进制可以转换为8位的2进制)

const buf = Buffer.from('123');
console.log(buf);// <Buffer 31 32 33>

Buffer的编码格式

node中支持八种编码,ascii , utf-8 , utf16le , ucs2 , base64 , latin1 , binary , hex , 我们知道最常用的ascii , utf-8  就够了;这里要补充的是能用ascii就用ascii编码(仅支持7位ascii),因为速度非常快 , 追求性能可以具体了解一下

创建Buffer

  • Buffer在全局作用域中,所以不需要用require加载Buffer
  • new Buffer的创建方式会无意中讲安全性和可靠性问题引入应用程序(已弃用)
  • Buffer.from()  复制

let arr = [49,65,66,97,98,99];    //这里的数字是ascii码
//传数组
let buf1 = Buffer.from(arr);      //返回一个新Buffer,包含数组副本
console.log(buf1);                //(ascii码转换为16进制数)<Buffer 31 41 42 61 62 63> 
console.log(buf1.toString());     //0ABabc

const buf = Buffer.from([0x1a, 0x2, 0x3, 0x4, 0x5]); //这里的数字是16进制数
console.log(buf);                 //1a,01,03,04,05
//补充,如果数组里面是对象等等,必须用json转换格式,且在读写入文件时用




//传buffer
let buf2 = Buffer.from(buf1)      //返回一个新Buffer,参数buf是Buffer副本
console.log(buf2);                //<Buffer 31 41 42 61 62 63>


//传字符串,字符编码
let buf3 = Buffer.from('123abc','utf-8'); //返回一个新的 Buffer,参数(字符串,编码格式(默认utf-8可以省略))
console.log(buf3);                //<Buffer 31 32 33 61 62 63>
  • Buffer.alloc() 安全可靠,但速度慢点
//参数(指定多少字节空间大小,填充数组(默认为0,可以省略),字符编码(默认utf-8可以省略)),已初始化
let buf = Buffer.alloc(10,49,'utf-8');
console.log(buf);            //<Buffer 31 31 31 31 31 31 31 31 31 31>
console.log(buf.toString()); //1111111111
  •       Buffer.allocUnsafe() 速度快,但有分配内存片段含有旧数据问题​​​​​​​

//参数 指定多少字节的空间大小(没初始化)
let buf = Buffer.allocUnsafe(10);
console.log(buf);    //<Buffer 00 00 00 00 00 00 00 00 00 00>

 

写入Buffer 

let buf = Buffer.alloc(20);
//参数(字符串,索引下标(默认为0),写入字节数(默认buffer.length),编码格式(默认utf-8)) 有默认的都可以省略,返回缓冲区字节长度
let length = buf.write("123abc",2,5,'utf-8');
console.log(buf);    //<Buffer 00 00 31 32 33 61 62 00 00 00 00 00 00 00 00 00 00 00 00 00>
console.log('写入字节数:',length);//写入字节数: 5
console.log(buf.toString('utf-8',2,2+length)); //123ab
//注意,buffer从0开始索引,这里从2开始写入,当然toString也要从2开始

toString参数(编码格式,开始索引下标,末尾索引下标)

后续可能会有所补充,今天累趴了,休息,欢迎指出不足之处,或者补充说明;

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值