Node之使用Buffer类处理二进制数据

创建Buffer对象

调用new Buffer(size),size为缓存区大小

new Buffer(10)

fill()方法来初始化缓存区中的所有内容

buf.fill(value, [offset], [end])
//value:为需要被写入的数值
//offset:用于指定从第几个字节处开始写入被指定的数值
//end:用于指定将数值一直写入到第几字节处

直接使用一个数组来初始化缓存区

new Buffer(array)

在这种形式的构造函数中,使用一个存放了需要被指定数值的数组来作为构造函数的参数。

直接使用一个字符串来初始化缓存区

new Buffer(str,[encoding]

在这种形式的构造函数中,使用两个参数,其中第一个参数为必须指定的参数,参数值为用于初始化缓存区的字符串,第二个参数值为一个用于指定文字编码格式的字符串,默认值为“utf8”。

在Node.js中,可以使用的编码格式如下

编码 说明
ascii ASCII字符串
utf8 UTF-8字符串
utf16le UTF-16LE字符串
ucs2 UCS2字符串
base64 经过BASE64编码后的字符串
binary 二进制数据(不推荐使用)
hex 使用十六进制数值表示的字符串

字符串长度和缓存区的长度

在Node.js中,一个字符串的长度与根据该字符串所创建的缓存区的长度并不相同。因为在计算字符串的长度时,以文字作为一个单位,而在计算缓存区的长度时,以字节作为一个单位。

Buffer对象的slice方法与该数据共享内存区域,如果修改使用slice方法取出的数据,则缓存区中保存的数据也将被修改。

Buffer对象的toString方法

可以使用Buffer对象的toString方法将Buffer对象中保存的数据转换为字符串

buf.toString([encoding], [start], [end])

在Buffer对象的toString方法中,可以使用三个可选参数,其中第一个参数用于指定Buffer对象中保存的文字编码格式,默认参数值为utf8。第二及第三个参数用于指定被转换数据的起始位置与终止位置,以字节为单位。toString方法返回经
过转换后的字符串。

Buffer对象的write方法

如果要将字符串当作二进制数据来使用,只需将该字符串作为Buffer类的构造函数的参数来创建Buffer对象即可。但是有时我们需要向已经创建的Buffer对象中写入字符串,这时可以使用该Buffer对象的write方法

buf.write(string, [offset], [length], [encoding])

在Buffer对象的write方法中,可以使用四个参数,其中第一个参数为必须指定参数,后三个参数为可选参数。第一个参数用于指定需要写入的字符串,第二个参数offset与第三个参数length用于指定字符串转换为字节数据后的写入位置。字节数据的书写位置为从第1+offset个字节开始到offset+length个字节为止(例如offset为3,length为6,写入位置为从第4字节开始到第9字节为止,包括第4字节与第9字节)。第四个参数用于指定写入字符串时使用的编码格式,默认为utf8格
式。

StringDecoder对象

在使用StringDecoder对象时,首先需要加载Node.js中的string_decoder模块

var StringDecoder = require('string_decoder').StringDecoder;

在加载了string_decoder模块之后,可以创建一个StringDecoder对象,在StringDecoder类的构造函数中,可以使用一个可选参数,该参数用于指定转换字符串时所使用的编码格式,默认参数值为utf8。

var decoder = new StringDecoder([encoding]);

要将Buffer对象中的数据转换为字符串时,可以使用StringDecoder对象的write方法

decoder.write(buffer)

Buffer对象与JSON对象之间的相互转换

在Node.js中,可以使用JSON.stringify方法将Buffer对象中保存的数据转换为一个字符串,也可以使用JSON.parse方法将一个经过转换后的字符串还原为一个数组。

复制缓存数据

当需要将Buffer对象中保存的二进制数据复制到另一个Buffer对象中时,可以使用Buffer对象的copy方法,copy方法的使用方法如下所示。

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

在Buffer对象的copy方法中,使用四个参数,其中第一个参数为必须指定的参数,其余三个参数均为可选参数。第一个参数用于指定复制的目标Buffer对象。第二个参数用于指定目标Buffer对象中从第几个字节开始写入数据,参数值为一个小
于目标Buffer对象长度的整数值,默认值为0(从开始处写入数据)。第三个参数用于指定从复制源Buffer对象中获取数据时的开始位置,默认值为0,即从复制源Buffer对象中的第一个字节开始获取数据,第四个参数用于指定从复制源Buffer对象中获取数据时的结束位置,默认值为复制源Buffer对象的长度,即一直获取完毕复制源Buffer对象中的所有剩余数据。

isBuffer方法用于判断一个对象是否为一个Buffer对象

Buffer.isBuffer(obj)

byteLength方法计算一个指定字符串的字节数

Buffer.byteLength(string, [encoding])

在byteLength方法中,使用两个参数,其中第一个参数为必须输入参数,用于指定需要计算字节数的字符串,第二个参数为可选参数,用于指定按什么编码方式来计算字节数,默认值为utf8。

concat方法用于将几个Buffer对象结合创建为一个新的Buffer对象

Buffer.concat(list,[totalLength])

在concat方法中,使用两个参数,其中第一个参数为必须指定的参数,参数值为一个存放了多个Buffer对象的数组,concat方法将把其中的所有Buffer对象联结创建为一个Buffer对象;第二个参数为可选参数,用于指定被创建的Buffer对象的总长度,当省略该参数时,被创建的Buffer对象为第一个参数数组中所有Buffer对象的长度的合计值。

isEncoding方法用于检测一个字符串是否为一个有效的编码格式字符串

Buffer.isEncoding(encoding)

你可能感兴趣的:(Node之使用Buffer类处理二进制数据)