nodejs——缓冲区Buffer

2018-01-18  本文已影响242人  含泪若笑

JavaScript 语言自身只有字符串数据类型,没有二进制数据类型。但在处理像TCP流或文件流时,必须使用到二进制数据。因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门存放二进制数据的缓存区。

Buffer类的一个特点是数据占用的内存不是分配在JavaScript VM / V8内存堆中,即这些对象不会被垃圾回收;相反,它会占用一个不会被修改的永久的内存地址(Node的C++层面实现内存的申请),这避免了因缓冲区内容的内存复制所造成的CPU浪费。Node在内存中使用上应用的是C++层面申请内存、在JavaScript中分配的策略。Node采用了Slab分配机制,Slab是一种动态内存管理机制。

三种方式创建缓冲区:var b = new Buffer("hello wold");

var buffer = new Buffer("hello", "utf-8");支持的编码格式有:ascii、utf-8、base64。

var b = new Buffer(1024);

查看或者修改缓冲区的值:b[10]

获取缓冲区的长度:b.length

切分缓冲区:var temp = b.(1,3);需要注意的是切分缓冲区并没有重新分配内存。所以要小心原始数据对切分后数据的影响,还有就是内存泄露,如果父缓冲区操作结束后会因为子缓冲区而被保留。为了避免这种问题,一般使用copy代替slice:buf.copy(targetBuffer, targetStart(默认为0), sourceStart(默认为0), sourceEnd(默认为buffer.length))。

缓冲区解码:var data = buffer.toString() 或 var data = buffer.toString("base64") 默认解码方式utf8

上一篇下一篇

猜你喜欢

热点阅读