1.1. Buffer基本概念
JavaScript 语言自身只有字符串数据类型,没有二进制数据类型。二进制可以存储电脑中任何数据(比如:一段文本、一张图片、一个硬盘,应该说电脑中所有的数据都是二进制。)NodeJs是服务端在处理像TCP(网络)流或文件流时,必须使用到二进制数据。因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门存放二进制数据的缓存区。
1.2 Buffer创建
Buffer 对象可以通过多种方式来创建。
1.2.1. 方法 1
创建长度为 10 字节(1kb=1024byte 1byte=8bit)的 Buffer 实例:
var buf = new Buffer(10);
1.2.2. 方法 2
通过给定的数组创建 Buffer 实例:
var buf = new Buffer([10, 20, 30, 40, 50]);
1.2.3. 方法 3
通过一个字符串来创建 Buffer 实例:
var buf = new Buffer("www.itsource.com", "utf-8");
utf-8 是默认的编码方式,此外它同样支持以下编码:"ascii", "utf8", "utf16le", "ucs2", "base64" 和 "hex"。
UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,又称万国码。
1.3 buffer的长度
buffer length的长度为字节,所以该长度并不是文本的长度,而是文本储存在内存中的字节数。比如我的长度ch中是长度1,但是存储在内存中的字节为3
var buffer = new Buffer('我'); console.log(buffer.length)
打印结果为 : 3
1.4 Buffer写入内容
语法
buf.write(string[, offset[, length]][, encoding])
参数
参数描述如下:
string - 写入缓冲区的字符串。
offset - 缓冲区开始写入的索引值,默认为 0 。
length - 写入的字节数,默认为 buffer.length
encoding - 使用的编码。默认为 'utf8' 。
返回值
返回实际写入的大小。如果 buffer 空间不足, 则只会写入部分字符串。
实例:
var buf = new Buffer(256); len = buf.write("www.itsource.com"); console.log("写入字节数 : "+ len);
buffer = new Buffer(256); buffer.fill(0) buffer.write("我爱你"); console.log(buffer.toString())
结果:我爱你
结果:
我爱你 9 我hel你
1.5 Buffer读取内容(转换为字符串)
语法:
读取 Node 缓冲区数据的语法如下所示:
buf.toString([encoding[, start[, end]]])
参数:
参数描述如下:
encoding - 使用的编码。默认为 'utf8' 。
start - 指定开始读取的索引位置,默认为 0。
end - 结束位置,默认为缓冲区的末尾。
返回值:
解码缓冲区数据并使用指定的编码返回字符串。
var buf = new Buffer([97,98,99]); console.log(buf.toString()); var s = "qq"; s+=buf;//转换为字符串 console.log(s);
结果:
abc
qqabc
1.6读取json内容
var buf = new Buffer('{"name":"二狗","age":"18"}'); console.log(JSON.parse(buf));
结果:
{ name: '二狗', age: '18' }
1.7 Buffer拷贝
拷贝一个Buffer的某一段到操作对象中。
语法
buf.copy(targetBuffer[, targetStart[, sourceStart[, sourceEnd]]])
参数
参数描述如下:
targetBuffer - 要拷贝的 Buffer 对象。
targetStart - 数字, 可选, 默认: 0
sourceStart - 数字, 可选, 默认: 0
sourceEnd - 数字, 可选, 默认: buffer.length
返回值:
没有返回值。
实例:
var buffer1 = new Buffer('ABC'); // 拷贝一个缓冲区 var buffer2 = new Buffer(3); //只能拷3个字节 buffer1.copy(buffer2); console.log("buffer2 content: " + buffer2.toString());
结果:
buffer2 content: ABC