1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
      Node中的可讀流和可寫流實(shí)例代碼分析

      這篇“Node中的可讀流和可寫流實(shí)例代碼分析”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來(lái)看看這篇“Node中的可讀流和可寫流實(shí)例代碼分析”文章吧。

      創(chuàng)新互聯(lián)是一家專注于成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)與策劃設(shè)計(jì),府谷網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十載,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:府谷等地區(qū)。府谷做網(wǎng)站價(jià)格咨詢:18980820575

      stream 也就是流,可以理解為一連串的字節(jié)像水流那樣的存在。按照官方文檔的解釋:

      A stream is an abstract interface for working with streaming data in Node.js.

      流是用于在 Node.js 中處理流數(shù)據(jù),也就是連續(xù)字節(jié)的抽象接口。 

      可讀的(Readable)

      我們可以通過 fs.createReadStream() 創(chuàng)建一個(gè)可讀流 readableStream,第 1 個(gè)參數(shù)可以是要讀取的文件路徑,比如現(xiàn)有文件 test.txt 內(nèi)容為:

      hello juejin

      第 2 個(gè)參數(shù)(可選)可以傳入一個(gè)選項(xiàng)對(duì)象,用來(lái)控制讀取數(shù)據(jù)的起止位置等: 

      const fs = require('fs')
      
      const readableStream = fs.createReadStream('./test.txt', {
        start: 6,
        end: 11
      })

      注意,讀取的數(shù)據(jù)是包括了 startend 的。 在之前介紹 events 模塊時(shí)說過,所有的流都是 EventEmitter 的實(shí)例。所以獲取數(shù)據(jù)是通過監(jiān)聽 'data' 事件:

      readableStream.on('data', data => {
        console.log(data)
        console.log(data.toString())
      })

      打印結(jié)果如下,默認(rèn)是 Buffer 對(duì)象,可以通過 toString() 方法轉(zhuǎn)為字符串:

      Node中的可讀流和可寫流實(shí)例代碼分析

      注意,讀取數(shù)據(jù)時(shí)一次最多讀取 64 * 1024 字節(jié),如果想改變?cè)摂?shù)值,可以通過 highWaterMark 選項(xiàng)更改。另外還可以使用 pause() 進(jìn)行暫停操作,使用 resume() 繼續(xù)讀?。?/p>

      const readableStream = fs.createReadStream('./test.txt', {
        start: 6,
        end: 11,
        highWaterMark: 2 // 默認(rèn)為 64 * 1024
      })
      
      readableStream.on('data', data => {
        console.log(data)
        console.log(data.toString())
        readableStream.pause() // 暫停讀取
        setTimeout(() => {
          readableStream.resume() // 恢復(fù)讀取
        }, 2000)
      })

      除了 'data' 事件,可讀流還有其它一些事件,比如監(jiān)聽文件被打開的 'open'(回調(diào)會(huì)被傳入 fd 參數(shù)),監(jiān)聽文件讀取到 end(默認(rèn)為讀取到最后)的 'end',監(jiān)聽文件關(guān)閉的 'close'(文件讀取完會(huì)自動(dòng)關(guān)閉):

      readableStream.on('data', data => console.log(data))
      readableStream.on('open', fd => console.log(`${fd}文件打開了`))
      readableStream.on('end', () => console.log('文件讀取到 end 位置了'))
      readableStream.on('close', () => console.log('文件已關(guān)閉'))

      打印結(jié)果如下:

      Node中的可讀流和可寫流實(shí)例代碼分析

      可寫的(Writable)

      使用 fs.createWriteStream() 可以創(chuàng)建可寫流,第 1 個(gè)參數(shù)傳入要寫入的文件,第 2 個(gè)同樣是用于配置的可選參數(shù),這里我們將 flags 由表示覆蓋寫入的 'w' 改為 'a',即追加寫入(如果還指定了寫入的起始位置 start,則為了兼容 windows 系統(tǒng), flags 應(yīng)該寫成 'r+'):

      const writableStream = fs.createWriteStream('test.txt', {
        flags: 'a'
      })
      
      writableStream.write('養(yǎng)成', err => console.log(`錯(cuò)誤信息:${err}`)) // 錯(cuò)誤信息:undefined
      writableStream.write('寫作的')
      writableStream.end('好習(xí)慣')

      寫入數(shù)據(jù)是通過 write 方法,上方代碼執(zhí)行的結(jié)果就是在原本的 "hello juejin" 后添加上了 "養(yǎng)成寫作的好習(xí)慣"。最后一次寫入可以使用 end 方法,這樣就能監(jiān)聽到可寫流的 'close' 事件了:

      writableStream.on('close', () => {
        console.log('關(guān)閉')
      })

      否則,可寫流需要手動(dòng) writableStream.close() 關(guān)閉才能監(jiān)聽到 'close' 事件。如果寫入成功,則作為 write()/end() 的第 2 個(gè)參數(shù)傳入的回調(diào)的 err 就為 undefined。

      可讀流還有另外一些事件,比如文件打開時(shí)的 'open' 事件,當(dāng) close()end() 被調(diào)用后文件寫入完成的 'finish' 事件。

      可讀流與可寫流的連接

      可讀流與可寫流可以通過 pipe 方法進(jìn)行連接,實(shí)現(xiàn)對(duì)文件的復(fù)制:

      const readableStream = fs.createReadStream('./test.txt')
      const writableStream = fs.createWriteStream('./copy.txt')
      
      readableStream.pipe(writableStream)

      如此,便能將 ./test.txt 內(nèi)的文本復(fù)制到 ./copy.txt 中。

      以上就是關(guān)于“Node中的可讀流和可寫流實(shí)例代碼分析”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對(duì)大家有幫助,若想了解更多相關(guān)的知識(shí)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


      當(dāng)前標(biāo)題:Node中的可讀流和可寫流實(shí)例代碼分析
      網(wǎng)址分享:http://ef60e0e.cn/article/posgji.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        全椒县| 荥经县| 观塘区| 哈巴河县| 永泰县| 宁化县| 隆尧县| 三河市| 噶尔县| 林西县| 宜宾县| 大余县| 社旗县| 余庆县| 万安县| 祁连县| 旬邑县| 昌吉市| 娄底市| 同仁县| 宜昌市| 姜堰市| 安龙县| 敖汉旗| 包头市| 双辽市| 广安市| 革吉县| 乌鲁木齐县| 肇庆市| 大悟县| 平安县| 阿坝| 丰顺县| 双辽市| 黎平县| 孟州市| 汕尾市| 神木县| 自贡市| 轮台县|