Node.js中处理数据I/O

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 => 锄禾日当午,汗滴禾下土。

猜你喜欢

转载自blog.csdn.net/qq_25000935/article/details/85013840