Buffer in Nodejs

Buffers - 使用二进制数据


node中的Buffer是应高效率处理字符串而生的。他的性能部分用C++实现,其他部分用javascript实现。下面是他的两个主要优势:

1、Buffer所占用的内存不是V8所分配,属于堆外内存。

2、Buffer无所谓编码方式,换句话说它的length是固定的、准确的。他的长度就是字节长度。


new Buffer(size)

new Buffer(str, encoding='utf8')

new Buffer(array)

buffer的创建有三种方法:1、指定长度;2、从字符串转换,3、从字节数组转换
buffer.write(string, offset=0, encoding='utf8')把一个字符串转换成一个buffer,offset:字符串开始读取的位置;encoding:指定字符串的编码方式
buffer.isBuffer(obj)检查某对象class是否Buffer
buffer.byteLength(string, encoding='utf8')获取某字符串的字节长度。
buffer.length获取buffer长度
buffer.copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)拷贝一个buffer
buffer.slice(start, end=buffer.length)返回一个新的buffer对象,该对象和原有对象使用了同一块内存。(所以修改a则b跟着变化,反之一样)
buffer.toString(encoding, start=0, end=buffer.length)把buffer转换成string




buf.toJSON()

对象化一个Buffer,实际效果是将一个二进制字节数组中每一位十进制化,组成新的数组。

var buf = new Buffer('test');
console.log('buf --> ',buf);
//字串化,相当于字串化一个数组,十六进转为十进
console.log('JSON.stringify(buf)-->',JSON.stringify(buf));
//字串化后,直接转化为Buffer已经和原来的buf不同了。因为new Buffer()接受一个长度、字串、字节数组为参数
console.log('new Buffer(json)-->',new Buffer(JSON.stringify(buf)));
//字串化后,需要再对象化->转化为Buffer才是原来的东西,
console.log( 'new Buffer(JSON.parse(JSON.stringify(buf)))-->',new Buffer(JSON.parse(JSON.stringify(buf))));
//对象化,得到的是一个十进的数组,他仍然可以被直接new Buffer为原来一样的东东
console.log('buf.toJSON -->',buf.toJSON());
console.log('new Buffer(buf.toJSON())-->',new Buffer(buf.toJSON()));
//new Buffer(buf)就是自己了。
console.log('new Buffer(buf)-->',new Buffer(buf));



buf[index]#


Get and set the octet at index. The values refer to individual bytes, so the legal range is between 0x00 and 0xFF hex or 0 and 255.



类方法: Buffer.concat(list, [totalLength])#

  • 连接Buffer的数组为一个整体的Buffer

  • totalLength 总的字节数,提供这个可选参数将提高速度


在《深入浅出nodejs》中使用这个方法拼接Buffer


buf.copy(targetBuffer, [targetStart], [sourceStart], [sourceEnd])


buf.slice([start], [end])

类似于array.slice,注意修改原有的/新的buf都会对另一个同时修改。因为他们指向同一块内存。



buf.fill(value, [offset], [end])#

  • value

  • offset Number, Optional

  • end Number, Optional

Fills the buffer with the specified value. If the offset (defaults to 0) and end (defaults to buffer.length) are not given it will fill the entire buffer.

var b = new Buffer(50);
b.fill("h");




转载于:https://my.oschina.net/u/1753171/blog/294034

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值