本文實(shí)例講述了node.js中stream流中可讀流和可寫流的實(shí)現(xiàn)與使用方法。分享給大家供大家參考,具體如下:
成都創(chuàng)新互聯(lián)一直在為企業(yè)提供服務(wù),多年的磨煉,使我們?cè)趧?chuàng)意設(shè)計(jì),成都全網(wǎng)營(yíng)銷到技術(shù)研發(fā)擁有了開發(fā)經(jīng)驗(yàn)。我們擅長(zhǎng)傾聽企業(yè)需求,挖掘用戶對(duì)產(chǎn)品需求服務(wù)價(jià)值,為企業(yè)制作有用的創(chuàng)意設(shè)計(jì)體驗(yàn)。核心團(tuán)隊(duì)擁有超過(guò)十多年以上行業(yè)經(jīng)驗(yàn),涵蓋創(chuàng)意,策化,開發(fā)等專業(yè)領(lǐng)域,公司涉及領(lǐng)域有基礎(chǔ)互聯(lián)網(wǎng)服務(wù)成都服務(wù)器托管、app開發(fā)定制、手機(jī)移動(dòng)建站、網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)絡(luò)整合營(yíng)銷。node.js中的流 stream 是處理流式數(shù)據(jù)的抽象接口。node.js 提供了很多流對(duì)象,像http中的request和response,和 process.stdout 都是流的實(shí)例。
流可以是 可讀的,可寫的,或是可讀可寫的。所有流都是 events 的實(shí)例。
一、流的類型
node.js中有四種基本流類型:
1、Writable 可寫流 (例:fs.createWriteStream() )
2、Readable 可讀流 (例:fs.createReadStream() )
3、Duplex 可讀又可寫流 (例:net.Socket )
4、Transform 讀寫過(guò)程中可修改或轉(zhuǎn)換數(shù)據(jù)的 Duplex 流 (例:zlib.createDeflate() )
二、流中的數(shù)據(jù)有兩種模式
1、二進(jìn)制模式,都是 string字符串 和 Buffer。
2、對(duì)象模式,流內(nèi)部處理的是一系統(tǒng)普通對(duì)象。
三、可讀流的兩種模式
1、流動(dòng)模式 ( flowing ) ,數(shù)據(jù)自動(dòng)從系統(tǒng)底層讀取,并通過(guò)事件,盡可能快地提供給應(yīng)用程序。
2、暫停模式 ( paused ),必須顯式的調(diào)用 read() 讀取數(shù)據(jù)。
可讀流 都開始于暫停模式,可以通過(guò)如下方法切換到流動(dòng)模式:
1、添加 'data' 事件回調(diào)。
2、調(diào)用 resume()。
3、調(diào)用 pipe()。
可讀流通過(guò)如下方法切換回暫停模式:
1、如果沒(méi)有管道目標(biāo),調(diào)用 pause()。
2、如果有管道目標(biāo),移除所有管道目標(biāo),調(diào)用 unpipe() 移除多個(gè)管道目標(biāo)。
四、創(chuàng)建可讀流,并監(jiān)聽事件
const fs = require('fs'); //創(chuàng)建一個(gè)文件可讀流 let rs = fs.createReadStream('./1.txt', { //文件系統(tǒng)標(biāo)志 flags: 'r', //數(shù)據(jù)編碼,如果調(diào)置了該參數(shù),則讀取的數(shù)據(jù)會(huì)自動(dòng)解析 //如果沒(méi)調(diào)置,則讀取的數(shù)據(jù)會(huì)是 Buffer //也可以通過(guò) rs.setEncoding() 進(jìn)行設(shè)置 encoding: 'utf8', //文件描述符,默認(rèn)為null fd: null, //文件權(quán)限 mode: 0o666, //文件讀取的開始位置 start: 0, //文件讀取的結(jié)束位置(包括結(jié)束位置) end: Infinity, //讀取緩沖區(qū)的大小,默認(rèn)64K highWaterMark: 3 }); //文件被打開時(shí)觸發(fā) rs.on('open', function () { console.log('文件打開'); }); //監(jiān)聽data事件,會(huì)讓當(dāng)前流切換到流動(dòng)模式 //當(dāng)流中將數(shù)據(jù)傳給消費(fèi)者后觸發(fā) //由于我們?cè)谏厦媾渲昧?highWaterMark 為 3字節(jié),所以下面會(huì)打印多次。 rs.on('data', function (data) { console.log(data); }); //流中沒(méi)有數(shù)據(jù)可供消費(fèi)者時(shí)觸發(fā) rs.on('end', function () { console.log('數(shù)據(jù)讀取完畢'); }); //讀取數(shù)據(jù)出錯(cuò)時(shí)觸發(fā) rs.on('error', function () { console.log('讀取錯(cuò)誤'); }); //當(dāng)文件被關(guān)閉時(shí)觸發(fā) rs.on('close', function () { console.log('文件關(guān)閉'); });
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。