1. Buffer 缓冲区
Buffer 类是随Node.js内核一起发布的核心库,用于支持 I/O 操作中移动的数据处理,Buffer 类为 Node.js 带来了一种存储原始数据的方法,该方法用来在内存中创建一个专门存放二进制数据的缓冲区,使得 Node.js 能够处理二进制数据
1.1 二进制数据和乱码
二进制在此不多赘述了.
人们很难看懂二进制数据,因此产生了字符编码.通过字符编码找到相应的字符集进行转译.windows 系统组员是的字符编码就是ASCII,它支持英文中常用的字母、数字和标点符号等与二进制数据之间的转换,同时还提供八进制、十进制和十六进制的对应编码,各种编码之间能够互相转换.
目前常见的字符集有ASCII字符集,GB2312字符集,BIG5字符集,GB18030字符集,Unicode字符集,etc.
乱码是指计算机二进制数据在转换字符的过程中,使用了不合适的字符集,而造成部分或所有字符无法被阅,产生空白或者输出的一系列字符
1.2 Buffer 的构造函数
缓冲区是在内容中操作数据的容器,node.js中的buffer缓冲区模块,支持开发者在缓冲区结构中创建、读取、写入和操作二进制数据,该模块是全局性的,所以在使用时不需要require().
buffer的创建方式如下:
new Buffer(array)、new Buffer(buffer)、new Buffer(arrayBuffer[,byteOffset[,length]])、new Buffer(size)、new Buffer(str[,encoding])
方法1 传入字节
var buf = new Buffer(size);
/* size代表字节大小 */
方法2 传入数组
var buf = new Buffer([10,20,30,40]);
方法3 窜入字符串和编码
var buf = new Buffer("buffer", "utf-8");
Buffer 支持以下编码
ASCII: 仅用于7位ASCII字符.这种编码方法非常快,ianqiehui丢弃高位数据.
UTF-16LE: 两个字节,UTF-16LE代表Unicode转换格式----16位小端字节序.
UCS2: 两个字节,以小尾字节序(Little-Endian)编码的Unicode字符.它只能对BMP(基本多种平面, U+0000~U+FFFF)范围内的字符编码.
base64: base64字符串编码是网络上最常见的用于传输8字节代码的编码方式之一
hex: hex文件是由符合Intel HEX文件格式的文本所构成的ASCII文本文件.在Intel HEX文件中每一行包含一个HEX记录.这些记录由对应机器语言码或常量数据的十六进制编码数字组成.
UTF-8: 针对Unicode的可变长度字符编码
1.3 写入缓冲区
buf.write(string[,offset[,length]][,encoding]);
参数 | 说明 |
---|---|
string | 写入缓冲区的字符串 |
offset | 缓冲区开始写入的索引值 |
length | 写入的字节数,默认为buffer.length |
encoding | 使用的编码,默认为utf8 |
// 创建一个可以存储5个字节的内存空间对象
var buf = new Buffer(5);
// 通过buffer对象的length属性可以获取buffer缓存中的字节大小
console.log(buf.length);
// 在缓冲区中写入a
buf.write("a");
// 输出缓冲区数据
console.log(buf);
buf.write("b",1,1,"ascii");
console.log(buf);
1.4 从缓冲区读取数据
在进行文件复制的过程中,源文件的数据写入缓冲区后,还需要从缓冲区中读取出来再写入目标文件
buf.toString([encoding[, start[, end]]]);
参数 | 说明 |
---|---|
encoding | 使用的编码,默认为UTF-8 |
start | 指定开始读取的索引位置,默认为0 |
end | 结束位置,默认为缓冲区的末尾 |
获取缓冲区数据的简单事例:
/*
* 读取缓冲区
*/
// 创建一个可以存储26个字节的内存空间对象
var buf = new Buffer(26);
// 向buffer数组中存入26个英文字母对应的编码
for (var i = 0; i < 26; i++){
buf[i] = i + 97;
}
// 输出全部字母
console.log(buf.toString('ascii'));
// 输出前5个字母
console.log(buf.toString('ascii', 0, 5));
// 使用默认编码输出前5个字母
console.log(buf.toString(undefined, 0, 5));
1.5 拼接缓冲区
输出两个或者多个缓冲区内容的组合,node.js中提供了拼接缓冲区的函数:
buf.concat(list[, totalLength]);
通过简单事例直接说明这个函数的功能:
/*
* 拼接缓冲区
*/
// 创建两个缓冲区
var buf = new Buffer("锄禾日当午,");
var buf1 = new Buffer("汗滴禾下土。");
// 执行拼接操作
var buf2 = Buffer.concat([buf, buf1]);
// 输出拼接后的内容
console.log("buf2 => " + buf2.toString());
// buf2 => 锄禾日当午,汗滴禾下土。