廢話不多說了,直接給大家貼代碼了,具體代碼如下所示:
//10個(gè)數(shù) 10個(gè)字節(jié),每次讀4b,寫1blet fs=require("fs");function pipe(source,target) { //先創(chuàng)建可讀流,再創(chuàng)建可寫流 //先讀一次,rs.on(data) //將讀到的類容寫入目標(biāo)中 ,返回布爾值,如果是ture,繼續(xù)寫,默認(rèn)情況應(yīng)該是false,暫停讀取 //ws.on('drain'),抽干后,回復(fù)讀取 //監(jiān)聽讀取文件完畢后,關(guān)閉讀取rs.on('end') let rs=fs.createReadStream(source,{highWaterMark:4}); let ws=fs.createWriteStream(target,{highWaterMark:1}); rs.on('data',function (chunk) { //chunk是buffer類型 if(ws.write(chunk)===false){ //寫不下,停止讀取 rs.pause() } }); ws.on('drain',function () { //每次寫的內(nèi)存干了就恢復(fù)讀取 console.log("111"); rs.resume() //恢復(fù)讀取 }); rs.on('end',function (chunk) { ws.end(); })}pipe('./1.txt','./3.txt')上面這種寫法比較繁瑣,大家看完后,忘記就行
node.js提供給我們內(nèi)置方法pipe
//10個(gè)數(shù) 10個(gè)字節(jié),每次讀4b,寫1blet fs=require("fs");function pipe(source,target) { let rs=fs.createReadStream(source,{highWaterMark:4}); let ws=fs.createWriteStream(target,{highWaterMark:1}); //可讀流到可寫流,異步操作,可以保證內(nèi)存不會(huì)被淹沒,讀一點(diǎn),寫一點(diǎn) // 如果想看文件類容,使用readFile rs.pipe(ws);}pipe('./1.txt','./4.txt')直接將讀取的流操作到寫入流中,還是異步操作
總結(jié)
以上所述是小編給大家介紹的Node.js 使用流實(shí)現(xiàn)讀寫同步邊讀邊寫功能,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)錯(cuò)新站長(zhǎng)站網(wǎng)站的支持!
新聞熱點(diǎn)
疑難解答
圖片精選