可读流案例//文件可读流的创建和消费constfs=require("fs");letrs=fs.createReadStream("test.txt",{flags:"r",encoding:null,fd:null,mode:438,autoClose:true,start:0,//end:3,highWaterMark:4,});//rs.on('data',(chunk)=>{//console.log(chunk.toString())//rs.pause()//暂停//setTimeout(()=>{//rs.resume()//切换回流动状态//},1000);//1秒后继续,直到结束//})//rs.on("readable",()=>{////letdata=rs.read();////console.log(data);//letdata;////while((data=rs.read())!==null){////console.log(data.toString());////}//while((data=rs.read(2))!==null){//每次读取两个字节,读取缓冲区后,取highWaterMark字节的长度到缓冲区中//console.log(data.toString());//console.log(rs._readableState.length);//}//});rs.on("open",(fd)=>{console.log(fd,"fileopen");});rs.on("close",(fd)=>{console.log("默认不会执行,数据读取(消费)后将被执行");});rs.on("data",(chunk)=>{console.log(chunk);});rs.on("end",()=>{console.log('数据清除后执行');});rs.on("err",(err)=>{console.log('出错时执行');});可写流caseconstws=fs.createWriteStream("test.txt",{flags:"w",mode:438,fd:null,encoding:"utf-8",start:0,highWaterMark:3,});//ws.write("writecontent",()=>{//console.log("writeover1");//});//ws.write("可以多次写入,后面会追加默认",()=>{//console.log("writeover2");//});//ws.write(1,()=>{//会报错,这里默认字符串或buffer=>fsrs//console.log("writeover1");//});ws.on("open",(fd)=>{console.log("open",fd);});ws.on("close",()=>{//所有数据写入操作完成后执行,afterendconsole.log("fileclose");});//end执行完后表示数据writeoperationCompletews.end();//end也可以放上要写入的内容,最后执行并写入ws.on("err",(err)=>{console.log("err");});Writablestream写入速度问题letws=fs.createWriteStream("test.txt",{highWaterMark:3,});letflag=ws.write("1");console.日志(标志);//trueflag=ws.write("2");console.log(flag);//trueflag=ws.write("3");console.log(flag);//false,//1.第一次调用write方法时,直接将数据写入文件//2.第二次启动write方法时,将数据写入缓冲区//3.生产速度与消费数据不同,一般情况下生产速度远快于消费速度//4.flag为false时,false并不代表当前数据不能写入,但我们应该通知数据生产者当前的消费速度跟不上生产速度。有时我们会将可读流的模块修改为暂停模式//5,当数据生产者暂停时,消费者会慢慢消化其内部缓存中的数据,直到我们可以再次进行写入操作//6.当缓冲区可以继续时写入数据,使用drain时间让producer等到ws.on("drain",()=>{console.log("drainwork");});控制写入速度,使用压缩机制批量限流="前端性能".split("");letnum=0;letflag=true;functionexcuteWrite(){flag=true;while(num!==4&&flag){flag=ws.write(source[num]);数++;}}excuteWrite();ws.on("drain",()=>{console.log("drainwork");excuteWrite();});或者这里直接使用rs.pipe(ws)
