Node.js——使用Buffer类处理二进制数据

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表示被检测的字符串








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值