91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2021-11-20 09:33:50 來源:億速云 閱讀:128 作者:iii 欄目:web開發

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

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

文件流

由于電腦中的各種介質讀存的速度不同、容量大小不同,因此可能在操作中會有一方存在長期等待的狀態

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

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

可讀流(Readable)

輸入流:數據從源頭流向內存,把磁盤里面的數據傳輸到內存里面。

createReadStream

fs.createReadStream(路徑, 配置)

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

highWaterMark:如果encoding有值,該數量表示一個字符數;如果encoding為null,該數量表示字節數

返回一個Readable的子類ReadStream

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

注冊事件

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

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

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

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

readable.close() // 手動觸發通過 readable.close()或者在文件讀取完畢之后自動關閉--autoClose配置項默認為 true

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

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

暫停讀取

readable.pause() 暫停讀取,會觸發 pause 事件

恢復讀取

readable.resume() 恢復讀取,會觸發 resume 事件

可寫流

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

ws.write(data)

寫入一個數據,data 可以使字符串也可以是Buffer,返回一個布爾值。

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

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

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

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

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


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

第二次寫入的時候已經占了兩字節,第三次寫入后直接占滿了,所以返回false

使用流復制粘貼文件,并解決背壓問題

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 也可以直接將 可讀流 和 寫入流串聯起來,也可以解決背壓問題

rs.pipe(ws);

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

到此,關于“node.js中的文件流舉例分析”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

梁山县| 杭州市| 赤城县| 建湖县| 湘潭县| 安吉县| 开封市| 搜索| 龙川县| 湖南省| 临武县| 洪泽县| 达日县| 峡江县| 咸阳市| 孝感市| 台东市| 青浦区| 理塘县| 宜川县| 杭锦旗| 界首市| 连江县| 赤峰市| 饶阳县| 保德县| 农安县| 徐汇区| 长子县| 精河县| 宁强县| 扶沟县| 岱山县| 宿州市| 尚义县| 清涧县| 琼海市| 大丰市| 永昌县| 犍为县| 天祝|