Buffer的使用

虽然知道了怎么实例化Buffer,但这还远远不够,因为Buffer类使随nodejs一起发布的核心库,Buffer不仅能处理tcp连接中发送接收的数据,也能处理图像或者是压缩文件,甚至说文件系统里面的数据,包括网络中二进制数据流,只要是nodejs中能处理的io操作中都可能用到buffer,那么具体要怎么用
要学会Buffer的使用,一部分是Buffer的实例化,一部分是实例化后buffer对象的处理,Buffer实例化上一节已经了解过了
 
Buffer静态方法
Buffer
{ [Function: Buffer]
poolSize: 8192,
from: [Function],
alloc: [Function],
allocUnsafe: [Function],
allocUnsafeSlow: [Function],
isBuffer: [Function: isBuffer],
compare: [Function: compare],
isEncoding: [Function],
concat: [Function],
byteLength: [Function: byteLength],
[Symbol(node.isEncoding)]: [Function] }
从上面可以看出Buffer是一个构造函数,同时他也是一个对象
poolSize:内存载体的容量
静态方法isBuffer:判断对象是否是Buffer类型对象,很多时候需要判断数据类型,才会有对应后续的操作
compare:用来判断两个对象的相对位置,一般来做按字符串的排序
isEncoding:判断nodejs是否支持某种编码,像中文处理这种,只能使用utf-8这种编码,对于gbk这种是无法解析的
concat:将几个Buffer对象,链接创建一个新的buffer对象
bytelength:获得指定编码下字符串所占的字节数
Buffer实例方法
buffer.write(string,offset=0,length,encoding='utf8');
string:一定要传的,也就是要写入的字符串
offset:用来指定字符串转化为字节数据后的写入的位置
length:写入的长度,
encoding:指定写入字符串的编码格式,默认是utf8
> var buf = new Buffer('hello every');
undefined
> buf.length
11
> buf.write('hi every')
8
> buf.toString()
'hi everyery'
> buf.length
11
这个长度依然是11,说明这个buffer在初始化的时候就已经被指定,无论你怎么去改,这个长度是不变的,这就是如果没有传offset的值的话,就是从第0为覆盖掉之前的数据,
> buf.write(' everyeveryevery',2,16);
9
> buf.toString()
'hi everyev'
我们看到打印出来的还是11位数,然后从之前的第二位开始被覆盖成新的字符串,知道11位,就不显示了
buffer.copy(target,tStart,tStart,sEnd=buffer.length);
target:必须要传的,用来指定复制的目标buffer
tStart:指定目标buffer对象中从第几个字节开始写,默认的值是0
tStart:用来指定原buffer里面获取数据的开始位置,默认的值也是0
sEnd:指从复制源对象里面获取数据的结束位置,默认值是buffer对象的长度
> var buf = new Buffer('hello every')
undefined
> buf.length
11
> var buf2 = new Buffer(5)
undefined
> buf.copy(buf2)
5
> buf2.toString()
'hello'
> buf.toString()
'hello every'
buf2打印出来的数是hello,默认从0位开始,那传上这个参数,从第6为开始,到第11位结束
> buf.copy(buf2,0,6,11)
5
> buf2.toString()
'every'

猜你喜欢

转载自www.cnblogs.com/wzndkj/p/9185775.html