亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

node 可讀流與可寫流的運(yùn)用詳解

 更新時(shí)間:2022年09月15日 14:23:32   作者:ljb2458  
這篇文章主要為大家介紹了node 可讀流與可寫流的運(yùn)用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

先談aip

fs文件系統(tǒng)模塊,是node.js的一個(gè)文件操作模塊,這篇文章將演示如何使用它進(jìn)行流式文件操作

創(chuàng)建一個(gè)可讀流

const rs =  fs.createReadStream("./1.txt",config)//參1文件路徑,參2配置對(duì)象

配置對(duì)象舉例

//一般都是直接默認(rèn)
const config = {
    encoding:"utf-8",//編碼格式
    highWaterMark:3,//每次讀取幾字節(jié),漢字占三字節(jié)
    autoClose:true,//自動(dòng)關(guān)閉
    start:0//從何處開始讀
    flawing:false//創(chuàng)建時(shí)暫停讀取
    flags:'r'//如何讀取
}

flags配置項(xiàng)選項(xiàng):

flags值功能
r以讀取模式打開文件。如果文件不存在拋出異常。
r+以讀寫模式打開文件。如果文件不存在拋出異常。
rs以同步的方式讀取文件。
rs+以同步的方式讀取和寫入文件。
w以寫入模式打開文件,如果文件不存在則創(chuàng)建。
wx類似 'w',但是如果文件路徑存在,則文件寫入失敗。
w+以讀寫模式打開文件,如果文件不存在則創(chuàng)建。
wx+類似 'w+', 但是如果文件路徑存在,則文件讀寫失敗。
a以追加模式打開文件,如果文件不存在則創(chuàng)建。
ax類似 'a', 但是如果文件路徑存在,則文件追加失敗。
a+以讀取追加模式打開文件,如果文件不存在則創(chuàng)建。
ax+類似 'a+', 但是如果文件路徑存在,則文件讀取追加失敗。

使用可讀流讀取數(shù)據(jù)

可讀流是一種流式的,持續(xù)的讀取,所以給我們的數(shù)據(jù)也是持續(xù)的,我們需要不斷的來接收它

我們假設(shè)1.txt里面存儲(chǔ)了: 123456789

const rs =  fs.createReadStream("./1.txt",{highWaterMark:1})//每次讀取1字節(jié)
/**用來保存可讀流讀取的數(shù)據(jù) */
const arr =[];
rs.on("data", (val) => {
    console.log(val);//這個(gè)函數(shù)會(huì)觸發(fā)九次
    arr.push(val)//將val添加到數(shù)組末尾
});
//監(jiān)聽end方法,可讀流讀取完畢時(shí)該方法調(diào)用
rs.on("end",()=>{
    console.log(arr)
})
//監(jiān)聽錯(cuò)誤
rs.on("error", (err: Error) => {
    console.log(err);
});

三個(gè)十分關(guān)鍵的方法

除了這兩個(gè)事件,它還有三個(gè)十分關(guān)鍵的方法

rs.on("data", (val: string) => {
    console.log(val);
    rs.pause()//暫停讀取
    rs.resume() //繼續(xù)讀取
});
rs.pipe(我是可寫流!下面會(huì)說!)//將讀取的文件直接放入寫入的文件中

一些不太常用的監(jiān)聽

rs.on("open", () => {
    console.log("打開了");
  });
rs.on("close", () => {
    console.log("關(guān)閉了");
});

監(jiān)聽書寫的注意事項(xiàng)

const arr = [];
rs.on("data", (val) => {
    console.log(val);//這個(gè)函數(shù)會(huì)觸發(fā)九次 
    arr.push(val)//將val添加到數(shù)組末尾
    rs.on("end",()=>{
        // !!! 注意 這樣書寫監(jiān)聽監(jiān)聽并不會(huì)按照我們的預(yù)期執(zhí)行
        console.log(arr);
    })
});

使用可寫流寫入數(shù)據(jù)

//創(chuàng)建可寫流
const ws = fs.createWriteStream("./2.text",config)
//使用可寫流
ws.write('1')//寫入,當(dāng)緩存區(qū)滿時(shí)會(huì)返回false,反之true
ws.close()//關(guān)閉可寫流
ws.end("寫完我后并關(guān)閉可寫流")
//偵聽可寫流
ws.on('poen',()=>{console.log('可寫流打開了')})
ws.on('close',()=>{console.log('可寫流關(guān)閉了')})
ws.on("drain",()=>{console.log("寫入緩存空了,可以繼續(xù)寫入")})//重要

什么是寫入緩存?

我們調(diào)用ws.write()沒有執(zhí)行完畢時(shí)是不能執(zhí)行下一個(gè)ws.write()的,操作所生成的數(shù)據(jù)被以鏈表的形式儲(chǔ)存在緩存中.鏈表的形式可以保證寫入的順序是正確的.

簡(jiǎn)單點(diǎn)說就是可寫流忙不過來了,就搞個(gè)內(nèi)存把任務(wù)裝起來,有空再去寫入

使用可讀流與可寫流處理文件

這個(gè)小dome會(huì)以64k為分隔,將1.txt的內(nèi)容拷貝到2.txt里面,這樣的可讀可寫流在客戶端傳大文件給服務(wù)器時(shí)尤為重要!

//創(chuàng)建可讀流
const rs = fs.createReadStream("./1.txt")
//創(chuàng)建可寫流
const ws = fs.createWriteStream("./2.txt")
//監(jiān)聽data方法,可讀流每次讀取會(huì)調(diào)用
rs.on("data", val => { 
    if(!ws.write(val+"64k分隔\n")){//\n是回車,\t是進(jìn)格...
        //如果緩存滿了會(huì)進(jìn)此這個(gè)代碼塊
        rs.pause()//暫停讀取
    }
});
//監(jiān)聽可寫流的drain方法,寫入緩存空了會(huì)調(diào)用此方法
ws.on("drain",()=>{
    rs.resume() //繼續(xù)讀取
})
//監(jiān)聽end方法,可讀流讀取完畢時(shí)該方法調(diào)用
rs.on("end",()=>{ 
    console.log("讀取完畢")
    //記得關(guān)閉可寫流!!!
    ws.close()
})
//監(jiān)聽錯(cuò)誤 
rs.on("error", err =>  console.log(err));

如果僅僅只是使用流復(fù)制一份文件

//創(chuàng)建可讀流 
const rs = fs.createReadStream("./1.txt") 
//創(chuàng)建可寫流
const ws = fs.createWriteStream("./2.txt")
rs.pipe(ws)//這就搞定了!,非常方便...

koa框架文件上傳

# 安裝koa-body
npm i koa-body
cosnt koaBody = require('koa-body')
app.use(koaBody({
  multipart: true,//接收文件開關(guān)
  formidable: {
        maxFileSize: 1 * 1024 * 1024//最大上傳1M
    }
}));
//收到文件后文件常用信息
const file = ctx.request.files.img //img是前端上傳文件時(shí)文件對(duì)應(yīng)的key名
file.size //文件大小
file.filepath//文件緩存路徑
file.originalFilename//文件原名稱
file.mimetype//文件類型
file.lastModifiedDate//文件上傳時(shí)間
file.newFilename//文件新名稱
file._writeStream//文件可寫流,這個(gè)沒啥用...
//如果有多個(gè)文件,file將會(huì)是一個(gè)數(shù)組
//可以使用文件的 file.filepath 緩存路徑來創(chuàng)建一個(gè)可讀流,然后保存到服務(wù)器或者數(shù)據(jù)庫(kù)或者第三方平臺(tái)

以上就是node 可讀流與可寫流的運(yùn)用詳解的詳細(xì)內(nèi)容,更多關(guān)于node 可讀流可寫流的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • node.js中的fs.fsyncSync方法使用說明

    node.js中的fs.fsyncSync方法使用說明

    這篇文章主要介紹了node.js中的fs.fsyncSync方法使用說明,本文介紹了fs.fsyncSync的方法說明、語法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • Express 配置HTML頁(yè)面訪問的實(shí)現(xiàn)

    Express 配置HTML頁(yè)面訪問的實(shí)現(xiàn)

    這篇文章主要介紹了Express 配置HTML頁(yè)面訪問的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • vscode調(diào)試node.js的實(shí)現(xiàn)方法

    vscode調(diào)試node.js的實(shí)現(xiàn)方法

    這篇文章主要介紹了vscode調(diào)試node.js的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Egret引擎開發(fā)指南之創(chuàng)建項(xiàng)目

    Egret引擎開發(fā)指南之創(chuàng)建項(xiàng)目

    Egret Engine(白鷺引擎)是一款使用TypeScript語言構(gòu)建的開源免費(fèi)的移動(dòng)游戲引擎。白鷺引擎的核心定位是開放,高效,優(yōu)雅。通過它,你可以快速地創(chuàng)建HTML5類型的移動(dòng)游戲,也可以將游戲項(xiàng)目編譯輸出成為目標(biāo)移動(dòng)平臺(tái)的原生游戲應(yīng)用。
    2014-09-09
  • node.js中axios使用心得總結(jié)

    node.js中axios使用心得總結(jié)

    這篇文章主要介紹了node.js中axios使用心得總結(jié),以及分析了中間遇到的錯(cuò)誤,大家參考一下。
    2017-11-11
  • Node.js使用officecrypto-tool實(shí)現(xiàn)讀取加密的Excel和Word文檔

    Node.js使用officecrypto-tool實(shí)現(xiàn)讀取加密的Excel和Word文檔

    這篇文章主要為大家詳細(xì)介紹了Node.js如何使用officecrypto-tool實(shí)現(xiàn)讀取加密的Excel和Word文檔的功能,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-09-09
  • nodejs基于express實(shí)現(xiàn)文件上傳的方法

    nodejs基于express實(shí)現(xiàn)文件上傳的方法

    這篇文章主要介紹了nodejs基于express實(shí)現(xiàn)文件上傳的方法,結(jié)合實(shí)例形式分析了nodejs基于express框架實(shí)現(xiàn)文件上傳功能的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2018-03-03
  • node+express+ejs制作簡(jiǎn)單頁(yè)面上手指南

    node+express+ejs制作簡(jiǎn)單頁(yè)面上手指南

    本文記錄了使用node+express+ejs制作簡(jiǎn)單頁(yè)面的全過程,話說express+ejs真的是太難了,有種蛋蛋的憂傷~
    2014-11-11
  • mac上node.js環(huán)境的安裝測(cè)試

    mac上node.js環(huán)境的安裝測(cè)試

    這篇文章主要為大家詳細(xì)介紹了mac上node.js環(huán)境的安裝測(cè)試,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • node.js中path路徑模塊的使用方法實(shí)例分析

    node.js中path路徑模塊的使用方法實(shí)例分析

    這篇文章主要介紹了node.js中path路徑模塊的使用方法,結(jié)合實(shí)例形式分析了node.js path路徑模塊的基本功能、原理、使用方法及操作注意事項(xiàng),需要的朋友可以參考下
    2020-02-02

最新評(píng)論