真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

node.js中的文件流舉例分析

這篇文章主要介紹“node.js中的文件流舉例分析”,在日常操作中,相信很多人在node.js中的文件流舉例分析問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”node.js中的文件流舉例分析”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

10年積累的網(wǎng)站設(shè)計(jì)、做網(wǎng)站經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)制作后付款的網(wǎng)站建設(shè)流程,更有薌城免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

node.js中的文件流舉例分析

文件流

由于電腦中的各種介質(zhì)讀存的速度不同、容量大小不同,因此可能在操作中會(huì)有一方存在長(zhǎng)期等待的狀態(tài)

文件流主要有三種,分別為輸入流(Readable)、輸出流(Writeable)雙工流(Duplex)。其中還有一種流不常用那就是 轉(zhuǎn)換流(Transform)

在 node 中提供了 stream 模塊,這個(gè)模塊中有兩個(gè)類實(shí)例:Readable 和 Writable,流中都會(huì)繼承這兩個(gè)類,因此會(huì)有很多共同的方法等。

可讀流(Readable)

輸入流:數(shù)據(jù)從源頭流向內(nèi)存,把磁盤里面的數(shù)據(jù)傳輸?shù)絻?nèi)存里面。

createReadStream

fs.createReadStream(路徑, 配置)

在配置里面有:encoding(編碼方式)、start(起始讀取字節(jié))、end(結(jié)束讀取字節(jié))、highWaterMark(每次讀取量)

highWaterMark:如果encoding有值,該數(shù)量表示一個(gè)字符數(shù);如果encoding為null,該數(shù)量表示字節(jié)數(shù)

返回一個(gè)Readable的子類ReadStream

const readable = fs.createReadStream(filename, { encoding: 'utf-8', start: 1, end: 2, // highWaterMark: });

注冊(cè)事件

readable.on(事件名,處理函數(shù))

readable.on('open', (err, data)=> {
    // console.log(err);
    console.log('文件打開了');
})

readable.on('error', (data, err) => {
    console.log(data, err);
    console.log('讀取文件發(fā)生錯(cuò)誤');
})

readable.on('close', (data, err) => {
    // console.log(data, err);
    console.log('文件關(guān)閉');
})

readable.close() // 手動(dòng)觸發(fā)通過 readable.close()或者在文件讀取完畢之后自動(dòng)關(guān)閉--autoClose配置項(xiàng)默認(rèn)為 true

readable.on('data', (data) => {
    console.log(data);
    console.log('文件正在讀取');
})

readable.on('end', ()=>{
    console.log('文件讀取完畢');
})

暫停讀取

readable.pause() 暫停讀取,會(huì)觸發(fā) pause 事件

恢復(fù)讀取

readable.resume() 恢復(fù)讀取,會(huì)觸發(fā) resume 事件

可寫流

const ws = fs.createWriteStream(filename[, 配置])

ws.write(data)

寫入一個(gè)數(shù)據(jù),data 可以使字符串也可以是Buffer,返回一個(gè)布爾值。

如果返回的是 true 表示寫入通道沒有被占滿,接下來的數(shù)據(jù)可以直接寫入,寫入通道就是配置中的 highWaterMark 表示的大小。

如果返回的是false 表示寫入通道占滿,其余字符開始等待,出現(xiàn)背壓情況。

const ws = fs.createWriteStream(filename, {
    encoding: 'utf-8',
    highWaterMark: 2
})

const flag = ws.write('劉');
console.log(flag); // false 
這里雖然只會(huì)執(zhí)行一次,但是在通道有空余空間的時(shí)候就會(huì)繼續(xù)寫入,并不在返回 值。

ws.write() 只會(huì)返回一次值。


const flag = ws.write('a');
console.log(flag);
const flag1 = ws.write('a');
console.log(flag1);
const flag2 = ws.write('a');
console.log(flag2);
const flag3 = ws.write('a');
console.log(flag3);

輸出順序:true、false、false、false

第二次寫入的時(shí)候已經(jīng)占了兩字節(jié),第三次寫入后直接占滿了,所以返回false

使用流復(fù)制粘貼文件,并解決背壓?jiǎn)栴}

const filename = path.resolve(__dirname, './file/write.txt');
const wsfilename = path.resolve(__dirname, './file/writecopy.txt');

const ws = fs.createWriteStream(wsfilename);
const rs = fs.createReadStream(filename)

rs.on('data', chumk => {
    const falg = ws.write(chumk);
    if(!falg) {
        rs.pause();
    }
})

ws.on('drain', () => {
    rs.resume();
})

rs.on('close', () => {
    ws.end();
    console.log('copy end');
})

pipe

使用 pipe 也可以直接將 可讀流 和 寫入流串聯(lián)起來,也可以解決背壓?jiǎn)栴}

rs.pipe(ws);

rs.on('close', () => {
    ws.end();
    console.log('copy end');
})

到此,關(guān)于“node.js中的文件流舉例分析”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!


網(wǎng)頁標(biāo)題:node.js中的文件流舉例分析
分享路徑:http://weahome.cn/article/ipjesi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部