前言

Buffer是什么

Buffer作为存在于全局对象上,无需引入模块即可使用,可以理解Buffer是在内存中开辟的一片区域,用于存放二进制数据。Buffer所开辟的是堆外内存。

Buffer的应用场景

流的生产者与消费者之间的速度通常是不一致的,因此需要buffer来暂存一些数据。buffer大小通过highWaterMark参数指定,默认情况下是16Kb。

存储需要占用大量空间的数据

Buffer 对象占用的内存空间是不计算在 Node.js 进程内存空间限制上的,所以可以用来存储大对象,但是对象的大小还是有限制的。一般情况下32位系统大约是1G,64位系统大约是2G。

如何创建Buffer

Buffer中存储的数据已确定

Buffer.from(obj) //obj支持的类型有 string buffer arrayBuffer等
但是Buffer.from(obj)不支持传入数字

Buffer中存储的数据未确定

Buffer.allocBuffer.allocUnsafeBuffer.allocUnsafeSlow
Buffer.alloc会用0来填充所分配的空间,但是速度会比后两个慢,不过比较安全
栗子:分配4kB内存

Buffer.alloc(4096)
Buffer.allocUnsafe(4096)
Buffer.allocUnsafeSlow(4096)

Buffer使用

Buffer转字符串

let buf = Buffer.from('hello')
console.log(buf.toString('utf-8')) //hello

Buffer转json

let buf = Buffer.from([0x1,0x2,0x3])
console.log(buf.toJSON()) //{'type':'Buffer',data:[1,2,3]}

Buffer裁剪,裁剪后返回的新的Buffer与原Buffer指向同一块内存

//buf.slice([start[,end]])
//start 起始位置
//end 结束位置

var buf1 = Buffer.from('hello');
var buf2 = buf1.slice(1, 3).fill('xx');
console.log(buf2.toString()); // xx
console.log(buf1.toString()); // txxt

API 参考 https://www.cnblogs.com/chyingp/p/nodejs-learning-buffer.html