Node.js学习(6)- 数据流模块stream

1.stream是Node.js在服务端的模块,用于支持流数据结构。

  stream是一种对象,对对象的处理就是响应事件,而js本身就是事件驱动:data事件表示流的数据已经可以读取了,end事件表示这个流已经到末尾了,没有数据可以读取了,error事件表示出错了。

"use strict";

var fs = require("fs");
//所有可以读取数据的流都继承自 stream.Readable,所有可以写入的流都继承自 stream.Writeable
//打开一个流,并以流形式读取数据
var rs = fs.createReadStream("sample.txt", "utf-8");
//data事件表示留的数据已经可以读取了,data事件可能有多次。chunk是流的一部分数据
rs.on("data",function (chunk) {
   console.log("DATA");
   console.log(chunk);
});
//end事件表示这个流已经到了末尾了,没有数据可以读取了
rs.on("end",function () {
    console.log("END");
});
//error事件表示出错了
rs.on("error",function (err) {
    console.log("ERROR:" + err);
});

//打开一个流,并以流形式写入数据,如果要以流的形式写数据,则不断的调用write并在最后用end结束即可
var ws1 = fs.createWriteStream("sample1.txt","utf-8");
ws1.write("使用Stream流形式写入文本数据...\n");
ws1.write("END");
ws1.end();
var ws2 = fs.createWriteStream("sample2.txt","utf-8");
ws2.write(new Buffer("使用Stream流形式写入二进制数据...\n", "utf-8"));
ws2.write(new Buffer("END","utf-8"));
ws2.end();

//pipe数据流方法,作用是串联两个数据流,可以作为复制文件用
//默认情况下当Readable流数据读取完毕,end事件触发会自动关闭Writable流。如果我们不希望自动关闭Writable流,需要传入参数:readable.pipe(writable,{end:false});
var rs = fs.createReadStream("sample3.txt", "utf-8");
var ws = fs.createWriteStream("sample.txt", "utf-8");
rs.pipe(ws);




运行之前sample.txt,sampel1.txt,sample2.txt均为空,sample3.txt内容为"pipe test.",运行后如下:

猜你喜欢

转载自blog.csdn.net/sunhuansheng/article/details/82184704