Node.js Buffer模块

前言

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

全部评论

相关推荐

03-26 13:04
已编辑
电子科技大学 算法工程师
xiaowl:你这个简历“条目上”都比较有深度性,但是实际上面试官又没法很好的评估你是怎么达到很多看上去很厉害的结果的。要避免一些看上去很厉害的包装,比如高效的内存复用策略的表达,如果仅是简单的一些内存共享机制,而且面试上也没有深挖的空间,就不要这样表达。比如,工程化模式本质上可能就是定义了一些abstract class,那也就没特别多值得讲的内容。建议简历上应该侧重那些你花了大量时间和精力解决、研究的问题,不要过分追求“丰富”,而是关注在技术深入度、问题解决能力的表现上。
没有实习经历,还有机会进...
点赞 评论 收藏
分享
牛客100866号技...:把电科加粗,把电科加粗,把电科加粗,两个吊车尾的项目合并成一个,再加一个管理系统。电科✌🏻在成都面中厂手拿把掐
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务