使用node.js中的Buffer类处理二进制数据的方法

在Node.js中,定义了一个Buffer类,该类用来创建一个专门存放二进制数据的缓存区。这篇文章就详细介绍了node.js中的Buffer类处理二进制数据的方法,下面话不多说,来看看详细的介绍。

创建Buffer对象

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

var arr = [0,1,2] var buf = new Buffer(arr) console.log(buf)

执行效果:

使用node.js中的Buffer类处理二进制数据的方法


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

var str = 'hello' var buf = new Buffer(str) console.log(buf)

执行效果:

使用node.js中的Buffer类处理二进制数据的方法


在Node.js中,将自动执行字符串的输入输出时的编码与解码处理,默认使用UTF8编码。

Buffer对象与字符串对象之间的相互转换

(1)toString

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

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

可选参数1:用于指定Buffer对象中保存的文字编码格式,默认参数为UTF8。

可选参数2:指定被转换数据的起始位置,以字节为单位。

可选参数3:指定被转换数据的终止位置,以字节为单位。

示例代码如下:

var buf = new Buffer('阁下何不随风起') console.log(buf) console.log(buf.toString('utf8',9,12)) console.log(buf.toString('utf8',12,buf.length))

效果如下:

使用node.js中的Buffer类处理二进制数据的方法

控制台

(2)write

有时我们需要向已经创建的Buffer对象写入字符串,这时可以使用该Buffer对象的write方法。

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

必须参数1:指定需要写入的字符串

可选参数2-3:指定字符串转换为字节数据后的写入位置,字节数据的书写位置为从第1+offset个字节开始到offset+length个字节为止。

可选参数4:编码格式,默认utf8

代码如下:

var buf = new Buffer('阁下何不随风起') buf.write('扶摇直上千万里',0,buf.length) console.log(buf.toString())

运行效果如下:

使用node.js中的Buffer类处理二进制数据的方法


控制台

(3)StringDecoder对象

在Node.js中,也可以使用StringDecoder对象将Buffer对象中的数据转换为字符串,该对象的作用与Buffer对象的toString方法的作用相同,但是对于utf8编码格式的字符串提供了更好的支持。

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

var StringDecoder = require('string_decoder').StringDecoder

在加载了string_decoder模块后,可以创建一个StringDecoder对象,方法如下:

var decoder = new StringDecoder([encoding])

在需要将Buffer对象中的数据转换为字符串时,可以使用StringDecoder对象的write方法,write方法中可以使用一个参数,用于指定需要被转换的Buffer对象,该方法会返回转换后的字符串,代码如下:

decoder.write(buffer)

好,来对比一下Buffer对象的toString方法和StringDecoder的write方法究竟谁对utf8支持的更好。

Buffer的toString方法如下:

//在UTF-8编码格式下,将1个文字转换为多个字节 var buf = new Buffer('阁下何不随风起') console.log(buf) //0x是我手动加的 var str1 = new Buffer([0xe9, 0x98, 0x81, 0xe4, 0xb8, 0x8b, 0xe4, 0xbd]) console.log(str1.toString()) var str2 = new Buffer([0x95, 0xe4, 0xb8, 0x8d, 0xe9, 0x9a, 0x8f, 0xe9, 0xa3, 0x8e, 0xe8, 0xb5, 0xb7]) console.log(str2.toString())

运行效果如下:

使用node.js中的Buffer类处理二进制数据的方法


控制台

当然,也可以用如下方法将两个buffer对象连接起来后再使用toString方法将其中的数据转换为字符串,但是当Buffer对象的长度较大时,这种操作的性能将会变得比较地下。

Buffer.concat([str1,str2]).toString()

StringDecoder的write方法如下:

//在UTF-8编码格式下,将1个文字转换为多个字节 var buf = new Buffer('阁下何不随风起') console.log(buf) //StringDecoder var StringDecoder = require('string_decoder').StringDecoder var decoder = new StringDecoder() //0x是我手动加的 var str1 = new Buffer([0xe9, 0x98, 0x81, 0xe4, 0xb8, 0x8b, 0xe4, 0xbd]) console.log(decoder.write(str1)) var str2 = new Buffer([0x95, 0xe4, 0xb8, 0x8d, 0xe9, 0x9a, 0x8f, 0xe9, 0xa3, 0x8e, 0xe8, 0xb5, 0xb7]) console.log(decoder.write(str2))

运行效果如下:

使用node.js中的Buffer类处理二进制数据的方法


控制台

谁支持的更好一眼就可以看出来了。

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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wzwppw.html