在js中对于二进制数据没有进行很好的支持(前端中二进制数据用的较少)。
但是在出路TCP流和文件流数据时,二进制数据处理不可避免。因此node
定义了一个Buffer类来处理二进制数据流。
1.创建Buffer类
Buffer类和其他类的创建并无区别,只需要new其对象即可。
注:Buffer类有一个length属性,用来规定Buffer类的长度。
第一种:var buf=new Buffer(length)//可以使用buf.fill(vale,[offset],[end]);来初始化buf值
第二种:var buf=new Buffer(array)//可以直接传入一个数组
第三种:var buf=new Buffer(string,[encoding])//直接传入一个字符串形式来创建
2.字符串长度与缓存区的长度
Buffer的长度不一定与字符串的长度相同,Buffer的长度表示的是字节长度。
例:var buf=new Buffer("我是博客");
console.log(buf.length);//12
3.Buffer与字符串之间的互相转换
Buffer类中有toString([encoding],start,end)的方法来讲Buffer转成字符串
参数1:指定转换后的编码格式。参数2:开始位置。参数3:结束位置。
Buffer对象的write(string,offset,length,[encoding])方法
参数1:写入Buffer的字符串,参数2:起始位置。参数3:长度。参数4:编码方式。
4.Buffer与JSON之间的相互转换。
Buffer转换成JSON对象:
var buf=new Buffer("我是博客");
jsonStr=JSON.stringify(bus);
JSON.parse(jsonStr);
JSON对象转换成Buffer对象
var buf 2=new Buffer(JSON.parse(jsonStr));
5.Buffer与数值对象之间的相互转换
buf.writeInt8(value, offset[, noAssert])//有符号的8进制数转换
buf.writeUInt8(value, offset[, noAssert])//无符号的8进制数转换
8可以为16 32 64...
6.Buffer类中常用的方法:
1)isBuffer(obj)用于判断对象是否是一个Buffer对象
2)byteLength(string,[encoding])判断传入的字符串的字节数
3)concat 连接两个buffer对象
4)isEncoding(encoding)用于检测一个字符串是否是一个有效的编码格式字符串。