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

node.js(三 stream 管道流 模塊化 函數)

tex nod writer var 系統 文件 實例 log node.js

一、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(三 stream 管道流 模塊化 函數)