学node的一点小笔记(四) stream 流

//stream(流)是一个抽象接口,node中有很多对象实现了这个接口
//例如对http服务器发起请求的request对象就是一个stream
//四种流类型:
//Readable:可读
//Writeable:可写
//Duplex:可读写
//Transform:操作被写入数据然后读出结果
//所有stream对象都是EventEmitter的实例
//常用事件:
//data:有数据可读时触发
//end:没有更多数据可读时触发
//error:发生错误时触发
//finish:所有数据都已写入底层系统时触发
var fs =require('fs');
var data ='';

//创建可读流
var readStream =fs.createReadStream('kill.txt');

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

//处理流事件 data,end,error
//chunk可以理解为流数据中的一块数据,对可读流它是Stream读取的数据块,对可写流它是Stream写入的数据块。
readStream.on('data',function(chunk){
data += chunk;
})

readStream.on('end',function(){
console.log(data)
})

//stack:属性
readStream.on('error',function(err){
console.log(err.stack)
})

var data1 ='烦死了';

//创建写入流
var writeStream =fs.createWriteStream('kill.txt');

//写入 设置编码
writeStream.write(data1,'UTF8');

//处理流事件
writeStream.on('finish',function(){
//不知道为什么没有输出“写入完成”,但是数据是写进去了
console.log('写入完成')
})

//处理错误
writeStream.on('error',function(err){
console.log(err.stack)
})

//创建一个可写流
var writeStream1 =fs.createWriteStream('input.txt');
readStream.pipe(writeStream1);

//必须俩参数都写,否则只写data默认是err
fs.readFile('input.txt',function(err,data){
console.log(data.toString())
})

//链式流
var zlib =require('zlib');
//压缩input.txt文件为input.txt.gz
readStream.pipe(zlib.createGzip())
readStream.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、付费专栏及课程。

余额充值