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

前端之家收集整理的这篇文章主要介绍了使用node.js中的Buffer类处理二进制数据的方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

前言

@H_502_3@

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

创建Buffer对象

@H_502_3@

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

@H_502_3@

执行效果:@H_502_3@

@H_502_3@ @H_502_3@

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

@H_502_3@

执行效果:@H_502_3@

@H_502_3@ @H_502_3@

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

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

@H_502_3@

(1)toString

@H_502_3@

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

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

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

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

示例代码如下:@H_502_3@

效果如下:@H_502_3@

@H_502_3@@H_502_3@

502_3@

(2)write

@H_502_3@

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

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

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

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

代码如下:@H_502_3@

运行效果如下:@H_502_3@

@H_502_3@ 控制台 @H_502_3@

(3)StringDecoder对象

@H_502_3@

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

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

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

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

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

Buffer的toString方法如下:@H_502_3@

文字转换为多个字节 var buf = new Buffer('阁下何不随风起') console.log(buf)

//0x是我手动加的
var str1 = new Buffer([0xe9,0x98,0x81,0xe4,0xb8,0x8b,0xbd])
console.log(str1.toString())

var str2 = new Buffer([0x95,0x8d,0xe9,0x9a,0x8f,0xa3,0x8e,0xe8,0xb5,0xb7])
console.log(str2.toString())

运行效果如下:@H_502_3@

@H_502_3@ 控制台 @H_502_3@

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

StringDecoder的write方法如下:@H_502_3@

文字转换为多个字节 var buf = new Buffer('阁下何不随风起') console.log(buf)

//StringDecoder
var StringDecoder = require('string_decoder').StringDecoder
var decoder = new StringDecoder()

//0x是我手动加的
var str1 = new Buffer([0xe9,0xbd])
console.log(decoder.write(str1))

var str2 = new Buffer([0x95,0xb7])
console.log(decoder.write(str2))

运行效果如下:@H_502_3@

@H_502_3@ 控制台 @H_502_3@

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

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

@H_502_3@

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

复制缓存数据

@H_502_3@

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

必须参数1:指定复制的目标Buffer对象 @H_502_3@

可选参数2:指定目标Buffer对象中从第几个字节开始写入数据 @H_502_3@

可选参数3:指定从复制源Buffer对象中获取数据时的开始位置,默认0 @H_502_3@

可选参数4:指定从复制源Buffer对象中获取数据时的结束位置,默认值为复制源对象的长度 @H_502_3@

示例代码如下:@H_502_3@

内容复制到buf2 Buffer对象中 //复制的目标起始位置为buf2 Buffer对象中的第11个字节处(第11个字节出开始写入) var buf1 = new Buffer('阁下何不随风起') console.log(buf1) var buf2 = new Buffer(128) buf2.fill(0) console.log(buf2)

//关键代码
buf1.copy(buf2,10)

//输出复制后的buf2
console.log(buf2)

//以字符串的形式打印buf2
var StringDecoder = require('string_decoder').StringDecoder
var decoder = new StringDecoder()
console.log(decoder.write(buf2))

运行效果如下:@H_502_3@

@H_502_3@ 控制台 @H_502_3@

Buffer类的类方法

@H_502_3@

(1)isBuffer方法 @H_502_3@

用于判断一个对象是否为一个Buffer对象,使用方法如下:@H_502_3@

示例代码如下:@H_502_3@

console.log(typeof a)
console.log(typeof b)
console.log('---我是奇妙的分隔符----')
console.log(Buffer.isBuffer(a))
console.log(Buffer.isBuffer(b))

运行结果:@H_502_3@

@H_502_3@ 控制台 @H_502_3@

(2)byteLength方法

@H_502_3@

可以使用ByteLength方法计算一个指定字符串的字节数,使用方法如下:@H_502_3@

必须参数1:指定需要计算字节数的字符串 @H_502_3@

可选参数2:编码格式,默认utf8 @H_502_3@

示例代码如下:@H_502_3@

运行结果如下:@H_502_3@

@H_502_3@ 控制台 @H_502_3@

(3)isEncoding方法

@H_502_3@

isEncoding方法用于检测一个字符串是否为一个有效的编码格式字符串。使用方法如下:@H_502_3@

在isEncoding方法中,使用一个参数,用于指定需要被检测的字符串,如果该字符串为有效的编码格式字符串,则方法返回true,如果该字符串不是一个有效的编码格式字符串,则方法返回false。 @H_502_3@

示例代码如下:@H_502_3@

运行效果如下:@H_502_3@

@H_502_3@ 控制台@H_502_3@

总结@H_502_3@

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。@H_502_3@ 原文链接:https://www.f2er.com/nodejs/44155.html

猜你在找的Node.js相关文章