在 Node.js 中提供了 Buffer 类,通过 Buffer 类中的各种构造函数创建 Buffer 对象,从而实现将缓存区中的字节数据转换为字符串对象以及将缓存区中的字节数据与数值对象之间进行转换。

一、如何创建Buffer类的实例

node.js 中的 Buffer 类是一个全局类,使用时不需要引入可直接使用,在 nodejs 中,Buffer 的创建可以分为两种:

1、在 Node 6.0 以前,直接使用 new Buffer,但这种方式存在两个问题。​

  • 参数复杂:内存分配,还是内存分配+内容写入,需要根据参数来确定。
  • 安全隐患:分配到的内存可能还存储着旧数据,这样就存在安全隐患。

「Node学习笔记」Node.js的Buffer模块详解_实例


2、为了解决上述问题,Buffer提供了Buffer.from、Buffer.alloc、Buffer.allocUnsafe、Buffer.allocUnsafeSlow 四个方法来创建。

  • Buffer.alloc(size[, fill[, encoding]]):返回一个指定大小的 Buffer 实例,如果没有设置 fill,则默认填满 0。
  • Buffer.allocUnsafe(size):返回一个指定大小的 Buffer 实例,但是它不会被初始化,所以它可能包含敏感的数据。
  • Buffer.allocUnsafeSlow(size):有两个大特点: 直接通过c++进行内存分配;不会进行旧值填充,所以可能包含旧数据,需要用fill() 或 write()重写。
  • Buffer.from(array):返回一个被 array 的值初始化的新的 Buffer 实例(传入的 array 的元素只能是数字,不然就会自动被 0 覆盖)
  • Buffer.from(arrayBuffer[, byteOffset[, length]]):返回一个新建的与给定的 ArrayBuffer 共享同一内存的 Buffer。
  • Buffer.from(buffer):复制传入的 Buffer 实例的数据,并返回一个新的 Buffer 实例。
  • Buffer.from(string[, encoding]):返回一个被 string 的值初始化的新的 Buffer 实例。


二、写入Buffer

1、write():使用 Buffer 类的 write 方法可以向已经创建的  Buffer 实例写入数据,具体语法如下:

「Node学习笔记」Node.js的Buffer模块详解_node_02

如果 buffer 实例没有足够的空间保存整个字符串,则只会写入一部分:

「Node学习笔记」Node.js的Buffer模块详解_实例_03


2、fill():也可用来填充buffer实例:

「Node学习笔记」Node.js的Buffer模块详解_前端开发_04

跟 write 不同的是,若没有指定 offset 与 end 时,value 会直接填充整个 buffer实例:

「Node学习笔记」Node.js的Buffer模块详解_前端开发_05


以上就是本期关于  Buffer 模块的分享,希望能给大家带来帮助。

下期给大家分享更多实战中的点滴,如果大家对此感兴趣,欢迎各位关注、留言,大家的支持就是我的动力!