03小白学nodejs buffer

JavaScript/前端
492
0
0
2022-04-18
标签   NodeJs

从数据结构看,buffer类似一个数组,元素是16进制的两位数

每个元素占内存中的1个byte,1byte=8bit

计算机中,一个0或1,表示一个bit位

0000 0000~1111 1111 对应十进制0~255,对应16进制00~FF

buffer是node的底层模块,不需引入,直接使用

buffer中存的是二进制数据,打印显示是以16进制的;

字节byte是传输数据的最小单位

创建buffer

  1. Buffer.from(str) 将一个字符串转换为buffer ,同时创建
var str = 'hello xqw';
var buf = Buffer.from(str);//将一个字符串保存到buffer中,并且创建buffer对象
console.log(buf);
console.log(buf.toString());//将十六进制转为字符串
console.log(buf.length);//占用内存9byte
console.log(str.length);//字符串的长度,英文下1字母占1字节,1中文占3字节
  1. Buffer.alloc(size) 创建一个指定大小的buffer(推荐)
var buf2 = Buffer.alloc(10)  向内存申请10byte的空间,大小固定;
console.log(buf2)   <Buffer 00 00 00 00 00 00 00 00 00 00>

通过索引,来操作buf中的元素
buf2[0] = 88;
buf2[1] = 255;
buf2[2] = 0xaa;  十六进制,以0x开头

buffer的大小一旦确定,是不能修改的,buffer实际上是对底层内存的直接操作
比如上面的buf2,  buf2[10] = 15  这样是添加不进去的, 这和数组是不一样

buf2[3] = 256;   // 1 0000 0000   前面的1超出了
buf2[4] = 556;   // 10 0010 1100  前面的10超出了

读取buffer值 console.log(buf2[2]);   170   只要数字在控制台或页面中输出,默认一定是10进制

输出的是其它进制呢?
buf2[2].toString(16)  输出16进制
buf2[2].toString(2)   输出2进制
  1. Buffer.allocUnsage(size) 创建一个指定大小的buffer,但是可能包含敏感数据
alloc创建后,会清除原数据,所以显示是00 
但是allocUnsage创建后,不会清除原数据,不安全,但是创建的速度更快

遍历buffer

for (var i=0; i < buf2.length; i++) {
    console.log(buf2[i]);
}