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