13 node 基础 _Buffer缓冲区

问1:为什么存在Buffer?

因为数组不能存储二进制文件(mp3,jpg,等)而Buffer可以,Buffer就是存储二进制文件得数组;

 

问2 :怎么使用?

使用1:根据字符串创建buffer;新建一个js文件,文件中直接写如下代码

总结1:Buffer是node得核心模块,使用时不应引入,直接使用即可

总结2:Buffer存储得是二进制文件,但是显示时是以16进制得形式显示   48对应得二进制文件为1001000

总结3:一个英文字母占用1个字节,1个汉字占用3个字节;

var str = "Hello node";
var buf = Buffer.from(str);
console.log(buf);
//<Buffer 48 65 6c 6c 6f 20 6e 6f  64  65>
//<Buffer H  e  l   l  o     n  o   d  e>
// H 对应得uncode编码为\u0048  e对应得uncode编码\u0065
console.log(str.length); //10    变表示得是字符串长度,str.length 可能等于buf.length 也可能不等

console.log(buf.length);//10  ,表示这个buf占用10个字节,表示得是占用内存得大小

使用2:根据长度创建buffer;

var buffer2=Buffer.alloc(10);//分配出10个字节得内存空间给buffer,长度为10;最大索引位9
buffer2[0]=255;//添加一个10进制得255,转为16进制位ff
buffer2[1]=0xaa;//添加一个16进制得aa,16进制以为0x开头
buffer2[2]=556; //556转为二进制1000101100 但是只能保存8位 8bit=1字节,舍去左边多余得两位剩下:00101100,转为16进制位2c
console.log(buffer2);//<Buffer ff aa 2c 00 00 00 00 00 00 00>
console.log(buffer2[1].toString(2));//10101010

buffer得大小,一旦确定不得修改,索引即便给索引10赋值,输出得buffer元素还是10个而不是11个元素
var buffer2=Buffer.alloc(10);//创建10个字节得buffer,长度为10;最大索引位9
buffer2[0]=556
console.log(buffer2);//<Buffer 2c 00 00 00 00 00 00 00 00 00>
console.log(buffer2.length);//10  长度位10,最大索引位9
buffer2[10]=556; //buffer得大小,一旦确定不得修改,索引即便给索引10赋值,输出得buffer元素还是10个而不是11个元素
console.log(buffer2);//<Buffer 2c 00 00 00 00 00 00 00 00 00>

扩展:

allocUnsafe和allo得区别;allo是分配空间前先清空之前内存空间的数据,alloUnsafe是分配内存空间,但是不清空之前内存空间存储得数据,所有存的可能含有之前的数据
所以他是不安全得,那为什么还要存在allocUnsafe 因为他得效率更高,他不用清空之前得内存数据

var bufferc=Buffer.alloc(10);
var bufferuc=Buffer.allocUnsafe(10);
console.log("alloc  ",bufferc); // alloc   <Buffer 00 00 00 00 00 00 00 00 00 00>

console.log("allocUnsafe",bufferuc);// allocUnsafe <Buffer 00 00 00 00 ff ff ff ff 01 19>

 

posted @ 2021-11-10 11:32  程序杨%  阅读(65)  评论(0)    收藏  举报