5.1 创建Buffer对象
 
在Node.js中,Buffer类可以在任何一个模块中被 利用,不需要为该类的使用加载任何模块。
 
Buffer有三种形式的构造函数:
 
①new Buffer(size);//使用new关键字创建Buffer对象
 
②new Buffer(array);//通过构造函数使用数组初始化缓存区
 
③new Buffer(str,[encoding]);//通过构造函数使用字符串初始化缓存区
 
接下来一一介绍:
 
 
 
 
1、使用new关键字创建实例对象。程序实例:
 
new Buffer(size);//创建缓存区大小为size的Buffer对象。
 
被创建的Buffer对象拥有一个length属性,表示缓存区的大小。
 
可以使用Buffer对象的fill方法初始化缓存区的内容,程序实例:
 
buf=new Buffer(512);//创建Buffer对象
 
buf.fill(value,[offset],[end]);
 
参数说明:
 
①value为必选参数,表示被写入的值。
 
②offset为可选参数,表示开始写入缓存区的位置,默认为0。
 
③end为可选参数,表示value一直写入直到缓存区的第几个字节。默认值为Buffer对象的大小。
 
 
 
 
 
 
 
2、使用构造函数直接使用数组初始化缓存区。
 
代码示例:
 
new Buffer(array);//使用数组初始化缓存区
 
程序示例:
 
buffer=new Buffer([0,1,2]);//直接使用数组初始化缓存区
 
 
 
 
3、直接使用字符串初始化缓存区。
 
代码示例:
 
new Buffer(str,[encoding]); 
 
参数说明:
 
①str:str为必须指定的参数,表示传入的字符串。
 
②encoding: 可选参数,用于指定文本的编码格式,默认为“UTF-8”。
 
 
 
 
 
 
 
5.2字符串的长度与缓存区的长度
 
字符串在计算长度的时候以文字作为一个单位,缓存区在计算长度的时候是以字节计算长度的。
 
 
 
 
5.3 Buffer对象与字符串对象之间的转换
 
5.3.1 Buffer对象的toString()方法
 
代码示例:
 
buf.toString([encoding],[start],[end]);
 
参数说明:
 
①encoding:用于指定字符的编码格式,默认是UTF-8。
 
②start:转换的起始位置,以字节为单位。
 
③end:转换的结束位置,以字节为单位。
 
 
 
 
5.3.2Buffer对象的write方法
 
使用Buffer的write方法可以向创建的Buffer对象写入字符串。代码示例:
 
buf.write(string,[offset],[length],[encoding]);
 
参数说明:
 
①string:表示即将写入Buffer对象的字符串。
 
②offset和length:表示字节数据写入位置从1+offset开始到offset+length截止。
 
③encoding:表示字符串的编码格式,默认值为UTF-8。
 
程序实例:
 
buf=new Buffer(128);//创建Buffer的对象buf
 
buf.write("Hello World");//使用write()方法向Buffer对象写入字符串
 
 
 
 
 
 
 
5.3.3 StringDecoder对象
 
在Node.js中可以使用StringDecoder对象将Buffer对象转换成字符串作用于toString()一致。在使用StringDecoder对象之前需要加载string_decoder模块。程序实例:
 
var StringDecoder=require('string_decoder').StringDecoder;
 
加载完成之后创建StringDecoder的对象:
 
var decoder=new StringDecoder([encoding]);//encoding为可选参数,用于指定字符编码,默认参数为UTF-8。
 
将Buffer对象通过StringDecoder转换成字符串,程序实例:
 
decoder.write(buf);
 
 
 
 
5.5 Buffer对象与JSON对象之间的转换
 
在Node.js中可以使用JSON.stringify()方法将Buffer对象中保存的数据转换成字符串。也可以使用JSON.parse()方法讲一个经过转换之后的字符串变回一个数组。
 

 
5.6 复制缓存数据
 
当需要将Buffer中的二进制对象复制到另一个二进制对象的时候,可以使用copy进行操作。copy的使用方法如下:
 
buf.copy(targetBuffer,[targetstart],[sourceStart],[sourceEnd]);
 
参数说明:
 
①targetBuffer:表示将要被复制的目标Buffer对象。
 
②targetStart:表示从目标Buffer的第几个字节开始写入数据,参数为一个长度小于Buffer对象的值,默认值为0。
 
③sourceStart:表示从源对象复制数据的起始位置,默认值为0。
 
④sourceEnd:表示复制源对象截止的位置 ,默认为Buffer对象的长度 。
 
 
 
 
5.7 Buffer的类方法
 
5.7.1 isBuffer()方法
 
isBuffer()方法可以判断一个对象是否为一个Buffer()对象。程序示例:
 
Buffer.isBuffer(obj);
 
 
 
 
5.7.2 byteLength()方法
 
使用byteLength()方法可以计算一个字符串的字节长度。
 
程序实例:
 
Buffer.byteLength(string,[encoding]);
 
参数说明:
 
①string:表示被测试的字符串
 
②encoding:表示字符串的编码格式,默认为UTF-8。
 
 
 
 
5.7.3 concat()方法
 
使用concat()方法可以将几个Buffer对象结合为一个新的Buffer对象。程序实例:
 
Buffer.concat(list,[totalLength]);
 
参数说明:
 
①list:表示一个装有多个Buffer对象的数组。
 
②totalLength:表示被创建的Buffer对象的总长度。
 
 
 
 
5.7.4 isEncdoing()方法
 
isEncoding()方法用于检测一个字符串是否为一个有效的编码格式字符串,程序实例:
 
Buffer.isEncoding(string);//string表示被检测的字符串