Node.js 使用流實(shí)現(xiàn)讀寫同步邊讀邊寫功能
廢話不多說了,直接給大家貼代碼了,具體代碼如下所示:
//10個(gè)數(shù) 10個(gè)字節(jié),每次讀4b,寫1b let 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,寫1b let 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ì)腳本之家網(wǎng)站的支持!
- node.js基于fs模塊對(duì)系統(tǒng)文件及目錄進(jìn)行讀寫操作的方法詳解
- node.js 利用流實(shí)現(xiàn)讀寫同步,邊讀邊寫的方法
- 基于node.js的fs核心模塊讀寫文件操作(實(shí)例講解)
- Node.js Sequelize如何實(shí)現(xiàn)數(shù)據(jù)庫(kù)的讀寫分離
- Node.js的文件權(quán)限及讀寫flag詳解
- Node.js讀寫文件之批量替換圖片的實(shí)現(xiàn)方法
- Node.js Streams文件讀寫操作詳解
- 在Node.js應(yīng)用中讀寫Redis數(shù)據(jù)庫(kù)的簡(jiǎn)單方法
- 詳解Node.js讀寫中文內(nèi)容文件操作
相關(guān)文章
基于node實(shí)現(xiàn)websocket協(xié)議
這篇文章主要介紹了基于node實(shí)現(xiàn)websocket協(xié)議的相關(guān)資料,需要的朋友可以參考下2016-04-04Nodejs在局域網(wǎng)配置https訪問的實(shí)現(xiàn)方法
做一個(gè)局域網(wǎng)WebRTC視頻聊天系統(tǒng),需要用到HTTPS。因此,配置Node.js使其支持HTTPS訪問。這篇文章主要介紹了Nodejs在局域網(wǎng)配置https訪問的實(shí)現(xiàn)方法,需要的朋友可以參考下2020-10-10Nodejs對(duì)postgresql基本操作的封裝方法
今天小編就為大家分享一篇Nodejs對(duì)postgresql基本操作的封裝方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-02-02Node.js中使用計(jì)時(shí)器定時(shí)執(zhí)行函數(shù)詳解
這篇文章主要介紹了Node.js中使用計(jì)時(shí)器定時(shí)執(zhí)行函數(shù)詳解,本文使用了Node.js中的setTimeout和setInterval函數(shù),需要的朋友可以參考下2014-08-08React+react-dropzone+node.js實(shí)現(xiàn)圖片上傳的示例代碼
本篇文章主要介紹了React+react-dropzone+node.js實(shí)現(xiàn)圖片上傳的示例代碼,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-08-08nodemon實(shí)現(xiàn)Typescript項(xiàng)目熱更新的示例代碼
這篇文章主要介紹了nodemon實(shí)現(xiàn)Typescript項(xiàng)目熱更新的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11簡(jiǎn)單談?wù)刵ode.js 版本控制 nvm和 n
大量開發(fā)者的貢獻(xiàn)使Node版本的迭代速度很快,版本很多(橫跨0.6到0.11),所以升級(jí)Node版本就成為了一個(gè)問題。目前有n和nvm這兩個(gè)工具可以對(duì)Node進(jìn)行無痛升級(jí),本文簡(jiǎn)單介紹一下二者的使用。2015-10-10