文章目录
Buffer(缓冲区)
- Buffer的结构和数组很像,操作的方法也和数组类似
- 数组中不能存储二进制的文件,而buffer就是专门用来存储二进制数据
- 使用buffer不需要引入模块,直接使用即可
- 在buffer中存储的都是二进制数据,但是在显示时都是以16进制的形式显示(二进制显示的太长了,不方便显示)
buffer中每一个元素的范围是从00 - ff (即:0-255) (即:00000000-11111111)
buffer中的一个元素占用一个字节(8bit)。
buffer.length
输出的是占用内存的大小。
创建Buffer
利用字符串创建buffer:Buffer.from
eg:
var str = "Hello world"
// 将一个字符串保存到buffer中,并返回
var buf = Buffer.from(str)
console.log(buf)
输出:
<Buffer 48 65 6c 6c 6f 20 77 6f 72 6c 64>
使用Buffer方法创建buffer:Buffer.alloc()
eg:创建10个字节大小的buffer
var buf = new Buffer(10)
console.log(buf.length)
输出:10
我们一般使用Buffer.alloc()
创建Buffer
var buf = Buffer.alloc(10)
Buffer.allocUnsafe (size)
Buffer.allocUnsafe (size)创建一个指定大小的buffer,但是buffer中可能含有敏感数据。
就是说在分配内存之前是不会清空数据的,如果这些数据恰好保存了用户的一些敏感数据就造成了数据泄露。
而alloc方法会将内存的数据进行清空之后再分配就会安全很多,但是缺点是性能没有allocUnsafe高。
Buffer元素的操作
我们一般直接通过索引操作buffer元素
var buf = Buffer.alloc(10)
buf[0] = 88
buf[1] = 255
buf[2] = 0xaa
console.log(buf)
输出:
<Buffer 58 ff aa 00 00 00 00 00 00 00>
Buffer的特点
-
Buffer的大小一旦确定,则不能修改
原因:Buffer实际上是对底层内存的直接操作
即创建buffer的时候实际上是为buffer分配内存连续的空间,如果在运行的时候再添加空间就不一定是连续空间了,这样buffer就不好维护了。 -
只要数字
在控制台或页面中输出一定是10进制
那么如果想要以16进制输出可以将它转换成16进制的string输出:
var buf = Buffer.alloc(10)
buf[0] = 88
buf[1] = 255
buf[2] = 0xaa
console.log(buf[2])
console.log(buf[2].toString(16))
输出:
170
aa
- 可以循环遍历buffer
buffer作用
浏览器发送的请求是以二进制的形式存储在buffer中的,同时服务器的响应数据也会暂时存储在buffer中。
以字符串形式输出buffer中的数据
buf.tostring()
将缓冲区中的数据转换为字符串