node内置模块——Buffer模块(缓冲区)

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()将缓冲区中的数据转换为字符串

猜你喜欢

转载自blog.csdn.net/mantou_riji/article/details/125012170