var arr = [0,1,2]var buf = new Buffer(arr)console.log(buf)执行效果:
第二种:直接使用一个字符串来初始化缓存区
var str = "hello"var buf = new Buffer(str)console.log(buf)执行效果:
在Node.js中,将自动执行字符串的输入输出时的编码与解码处理,默认使用UTF8编码。
Buffer对象与字符串对象之间的相互转换
(1)toString
可以使用Buffer对象的toString方法将Buffer对象中保存的数据转换为字符串,使用方法如下:
buf.toString([encoding],[start],[end])可选参数1:用于指定Buffer对象中保存的文字编码格式,默认参数为UTF8。
var buf = new Buffer("阁下何不随风起")console.log(buf)console.log(buf.toString("utf8",9,12))console.log(buf.toString("utf8",12,buf.length))效果如下:
控制台
(2)write
有时我们需要向已经创建的Buffer对象写入字符串,这时可以使用该Buffer对象的write方法。
buf.write(string,[offset],[length],[encodign])必须参数1:指定需要写入的字符串
var buf = new Buffer("阁下何不随风起")buf.write("扶摇直上千万里",0,buf.length)console.log(buf.toString())运行效果如下:
控制台
(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支持的更好。
//在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())运行效果如下:
控制台
当然,也可以用如下方法将两个buffer对象连接起来后再使用toString方法将其中的数据转换为字符串,但是当Buffer对象的长度较大时,这种操作的性能将会变得比较地下。
Buffer.concat([str1,str2]).toString()StringDecoder的write方法如下:
//在UTF-8编码格式下,将1个文字转换为多个字节var buf = new Buffer("阁下何不随风起")console.log(buf)//StringDecodervar StringDecoder = require("string_decoder").StringDecodervar 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))运行效果如下:
控制台
谁支持的更好一眼就可以看出来了。
Buffer对象与JSON对象之间的相互转换
在Node.js中,可以使用JSON.stringify方法将Buffer对象中保存的数据转换为一个字符串,也可以使用JSON.parse方法将一个经过转换后的字符串还原为一个数组。
复制缓存数据
当需要将Buffer对象中保存的二进制数据复制到另一个Buffer对象中时,可以使用Buffer对象的copy方法,copy方法的使用方法如下:
buf.copy(targetBuffer,[targetStart],[sourceStart],[sourceEnd])必须参数1:指定复制的目标Buffer对象
//目标:将buf1 Buffer对象中的内容复制到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)//输出复制后的buf2console.log(buf2)//以字符串的形式打印buf2var StringDecoder = require("string_decoder").StringDecodervar decoder = new StringDecoder()console.log(decoder.write(buf2))运行效果如下:
控制台
Buffer类的类方法
(1)isBuffer方法
用于判断一个对象是否为一个Buffer对象,使用方法如下:
Buffer.isBuffer(objc)示例代码如下:
var a = "abcde"var b = new Buffer(10)console.log(typeof a)console.log(typeof b)console.log("---我是奇妙的分隔符----")console.log(Buffer.isBuffer(a))console.log(Buffer.isBuffer(b))运行结果:
控制台
(2)byteLength方法
可以使用ByteLength方法计算一个指定字符串的字节数,使用方法如下:
Buffer.byteLength(string,[encoding])必须参数1:指定需要计算字节数的字符串
var str = "阁下何不随风起"console.log(str.length)console.log(Buffer.byteLength(str,"utf8"))console.log(Buffer.byteLength(str,"base64"))console.log(Buffer.byteLength(str,"utf16le"))运行结果如下:
控制台
(3)isEncoding方法
isEncoding方法用于检测一个字符串是否为一个有效的编码格式字符串。使用方法如下:
Buffer.isEncoding(encoding)在isEncoding方法中,使用一个参数,用于指定需要被检测的字符串,如果该字符串为有效的编码格式字符串,则方法返回true,如果该字符串不是一个有效的编码格式字符串,则方法返回false。
var str1 = "utf8"console.log(Buffer.isEncoding(str1))var str2 = "utf16le"console.log(Buffer.isEncoding(str2))var str3= "utf16e"console.log(Buffer.isEncoding(str3))运行效果如下:
控制台
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。