当前位置: 首页 > 后端技术 > Node.js

节点-缓冲区(buffer)

时间:2023-04-03 18:37:53 Node.js

Buffer(缓冲区)Buffer的结构和数组非常相似,操作方法也和数组相似。二进制文件不能存放在数组中,Buffer是专门用来存放二进制数据的。它的元素是十六进制的两位数。一个元素代表一个字节,所以Buffer中每个元素的范围都在00-ff之间。00-ff转成二进制就是00000000-11111111。这也是我们电脑底层的一个0或1,我们称之为1。Bit(位),8bit=1byte(字节)Buffer中存放的是二进制数据,但显示为16进制,表明内存中的Buffer不是JavaScript分配的,而是C++在底层申请的,也就是我们可以直接通过Buffer在内存中创建空间letstr='HelloWorld'//将字符串转换为BufferletbufStr=Buffer.from(str)//如何转换为字符串?letnewStr=bufStr.toString()console.log(bufStr)//console.log(newStr)//HelloWorld创建指定大小的BufferBuffer,一旦创建嗯,可以修改旧方法。不推荐使用Buffer构造函数的方式。官方说很快就会被丢弃//Createa10-byteBufferletbuf=newBuffer(10)新方法一:alloc//Createa10bytesBufferletbuf=Buffer.alloc(10)buf[0]=66buf[1]=255buf[2]=0xaa//这些写法都是直接赋一个16进制数据,16进制数据,开头是`0x`console.log(buf)console.log(buff[2])//结果是170,为什么不是aa?因为只要是在控制台或者页面上输出的数字,都必须是十进制的。新方法2:allocUnsafe//createa10-byteBuffer//和alloc基本一样,只是allocUnsafe创建的Buffer可能包含敏感数据//什么意思?当alloc被创建时,它会清除那块内存,但allocUnsafe不会空,也就是说之前的数据可能会泄露//这种情况下,为什么还需要allocUnsafe呢?因为allocUnsafe效率更高,但是我们一般使用allocletbuf=Buffer.allocUnsafe(10)console.log(buf)