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

这篇博客探讨了NodeJS中的Stream接口,包括读取流、写入流和Duplex及Transform流的类型。文章强调所有Stream对象都是EventEmitter的实例,并列举了关键事件如data、end、error和finish。此外,还解释了管道流作为数据中转站的角色,以及如何实现链式流来连续处理多个流。
摘要由CSDN通过智能技术生成

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('文件解压完成');

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值