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>
浙公网安备 33010602011771号