1. 程式人生 > >node.js(三 --- stream 管道流 模組化 函式)

node.js(三 --- stream 管道流 模組化 函式)

一、stream  

  stream是一個抽象的介面,node中有很多物件實現了這個介面。

  stream有四種流型別: Readable: 可讀操作;  Writable: 可寫操作;  Duplex: 可讀可寫操作;  Transform:  操作被寫入資料,然後都出結果;

  所有的stream物件獨有EventsEmitter的例項,常用的事件有:  

      data: 當有資料可讀時觸發;

      end:  沒有更多的資料可讀時觸發;

      error:  在接收和寫入過程中發生錯誤時觸發;

      finish:  所有資料已被寫入到底層系統時觸發;

 

  1、從流中讀取資料

   例如: var  fs = require('fs');

       var data = '';

      var readerStream = fs.createReadStream('demo.txt');    //建立可讀的流

      //開始執行讀取的事件

      readerStream.on('data',  function(chunk){

        data += chunk;

      })

      readerSteam.on('end',   function(){

        console.log(data)

      })

      readerStream.on('error',  function(err){

        console.log(err.stack)

      })

      

  2、寫入流

    例如: 

      var fs = require('fs');

      var  data = '要寫入的內容'; 

      var writerStream = fs.creamWriteStream('demo.txt');       //寫入demo.txt 文件內

      writeStream.write('data',  'UTF8');    //使用utf-8格式寫入資料;

      writeStream.end();     //標記檔案末尾;

      writeStream.on('finish',   function(){

         console.log('寫入完成');

      })

      writeStream.on('error',  function(){

        console.log(err.stack);

      })

      

  3、管道流

  管道提供了一個從輸出流到輸入流的機制; 通常用於從一個流中回去資料,然後傳遞到另一個流中。

  例如; 

    var fs = require('fs');

    var readerStream = fs.creamReadStream('demo1.txt');

    var writeSteam = fs.creamWriteStream('demo2.text');

    readerStream.pip( writeStream);

 

  4、鏈式流

  鏈式是通過連線輸出流到另一個流並建立多個流操作鏈的機制。鏈式流一般用於管道操作。

  例如: 

    var fs =  require('fs');

    var zlib = require('fs');

    var readerStream = fs.createReadStream('demo1.txt');

    readerStream.pip(zlib.createGzip())     //將檔案進行壓縮demo.txt.gz

          .pip(fs.createWriteStream('demo1.txt.gz'))

    fs.createReadStream('demo1.txt.gz').pip(zlib.createGunzio())   //將壓縮檔案進行解壓

          .pip(fs.createWriteStream(demo.txt))    

 

 

二、模組化

  模組是node.js應用程式的基本組成部分,檔案和模組是一  一 對應的。 簡而言之,一個node.js檔案就是一個模組,這個檔案可能是javascript、json或者編譯過的c/c++擴充套件;

  

 

三、函式

  node.js中的函式和javascript基本是一樣的,都存在匿名函式,函式存在引數,以及可以有回撥函式等等。