node - 中events 订阅 on 发布 emit发布 node - stream中流的方法 node - pipe实现

let EventEmitter = require('events');
let {inherits} = require('util');
function Girl(){}
let girl = new Girl();
inherits(Girl,EventEmitter);//Girl继承events

let fn = function(param){
        console.log('哭',param);
}

girl.on('失恋',fn)//订阅

girl.once('失恋',function(param){//执行一次
        consloe.log('吃',param);
})

girl.removeListener('失恋',fn);//取消监听

girl.emit('失恋','我');//发布
//流,可读可写

let fs = require('fs');

//heightWaterMark 每次能读多少,默认64k,默认读buffer

let rs = fs.createReadStream('1.txt');

//监听事件 数据到来的事件  rs.emit('data',数据)
//默认叫非流动模式 => 流动模式
let arr = [];
rs.on('data',function(chunk){
        console.log(chunk)
        arr.push(chunk);
        rs.pause();//暂停 暂停的是on('data')的触发
})
rs.resume(); //恢复data事件的触发
//默认data事件是不停的触发,知道文件中的数据全部读出来
rs.on('end',function(){
        console.log(Buffer.concat(arr).toString())
})

rs.on('err',function(err){
        //文件不存在
})


// on('data')  on('err') on(''end) resume() pause()
let fs = require('fs')
//可写流 默认要占用16k
let ws = fs.createWriteStream('1.text',{heightWaterMark:1})
//可写流有两个方法 write end
ws.write(1+'');//可写流来写数据必须时字符串类型或buffer类型

let status = ws.write(2+''); ws.write为异步,返回true或false,false表示该次读满了,先暂停等写完了再开始读取

ws.end('吃饱了');//调用end后不能再用write
ws.on('drain',function(){ //当读入的文件 全部写入后 就恢复读取
    console.log('读完了')
})

猜你喜欢

转载自blog.csdn.net/memedadexixaofeifei/article/details/85921980