NodeJS学习笔记(三)(此系列为runoob内容的个人理解版,例子基本来源runoob)

Stream(流)

流,抽象接口。例如:对http发请求的request对象就是一个流,stdout也是一个流。

流的四种类型:1.Readable可读操作 2.Writable可写操作 3.Duplex可读可写操作 4.Transform操作被写入数据,然后读结果

所有Stream对象都是EventEmitter的实例,常用事件:1.data:当有数据可读时触发 2.end:没有数据可读时触发 3.error:接受和写入的过程中发生错误时触发 4.finish:所有数据已被写入底层系统时触发

读取流

var fs = require('fs');
var data = '';

var readerStream = fs.createReadStream('input.txt'); //input.txt内容为你好
//创建了可读流

readerStream.setEncoding('UTF8'); //设置编码为utf8

readerStream.on('data',function(chunk){
    data+=chunk;  //回调函数带参数就是读到的数据
});

readerStream.on('end',function(){
    console.log(data); //当没有数据可读,则输出data
});

console.log('程序执行完毕');



//结果:
程序执行完毕
你好

写入流

var fs = require('fs');
var data = '你好';

var writerStream = fs.createWriteStream('output.txt');

writerStream.write(data,'UTF8'); //专门有一个write函数,第一个传写入数据,第二个编码方式
writerStream.end(); //标记写入完成

writerStream.on('finish',function(){
    console.log('写入完成')
})

writerStream.on('error',function(){
    console.log(err.stack)
})

console.log('程序写入完成')

//结果:程序写入完成
写入完成
//cat output.txt (linux指令,看看output里面内容)
你好

管道流

有点类似中转站的概念,例如:我们从一个流中获取数据再将数据传递到另外一个流中

//input.txt内容:你好

var fs = require('fs');
var readerStream = fs.createReadStream('input.txt');
var writerStream = fs.createWriteStream('output.txt');

//管道操作,我们像是一个中转站,读取后再传给别的流

readerStream.pipe(writerStream);

console.log('程序执行完毕')

链式流

顾名思义,一路流下去,就是链式流,多个pipe

var fs = require('fs');
var zlib = require('zlib');

//意思:压缩input.txt变成input.txt.gz
fs.createReadStream('input.txt')
    .pipe(zlib.createGzip())
    .pipe(fs.createWriteStream('input.txt.gz'));

console.log('文件压缩完成')


//顺便解压

fs.createReadStream('input.txt.gz')
    pipe(zlib.createGunZip())
    pipe(fs.createWriteStream('input.txt'));

console.log('文件解压完成');

 

你可能感兴趣的:(NodeJS学习笔记(三)(此系列为runoob内容的个人理解版,例子基本来源runoob))