目录
一、什么是Buffer?
Buffer代表一个缓冲区,存储二进制数据,是字节流。我们在网络传输时,就传输的这种字节流。写文件时,也是写的字节流。
Buffer是十六进制。
JS语言没有二进制数据类型,而在处理TCP和文件流的时候,必须要处理二进制数据。所以,其实node是把数据从二进制转换成了十六进制。
NodeJS提供了一个Buffer对象来提供对二进制数据的操作。
Buffer是一个表示固定内存分配的全局对象,也就是说要放到缓存区中的字节要提前确定。
二、buffer的创建
1、alloc
用alloc方法创建的buffer,每一个二进制位都会归零。
//1、alloc
let buf = Buffer.alloc(10);
console.log(buf);
2、allocUnsafe
此方法可能会创建到旧数据,不会自动把二进制位清零。
这种方式没有清零操作,比alloc快
//2、allocUnsafe
let buf2 = Buffer.allocUnsafe(10);
console.log(buf2);
3、from
每个字母的unicode编码对应的10进制数,转换为16进制数存入buffer中
//3、from
let buf3 = Buffer.from('hello');
console.log(buf3);
三、Buffer的操作
1、Buffer与字符串的转换
let buf4 = Buffer.from([105,108,111,118,101,121,111,117]);
console.log(buf4);
console.log(buf4.toString());//utf-8
2、Buffer的读写
查看buffer里的元素,修改元素等操作和数组一样。
let buf = Buffer.from('hello');
console.log(buf[0]);
console.log(buf[0].toString(2));//将第一个元素转为二进制
四、Buffer的溢出
8个二进制位能存的最大十进制数为255。
当溢出时,会自动舍弃高位上的数字,只保留8位二进制数。
//溢出
let buf = Buffer.from('hello');
buf[0] = 361; //舍弃高位数字,361对应的二进制数为0001 0110 1001 ,舍弃之后变为0110 1001 ,对应的16进制数为69,所以运行结果为69