前言
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.alloc
、Buffer.allocUnsafe
、Buffer.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