1. 程式人生 > >NodeJS學習系列課程筆記(NodeJs Stream 的相關使用方法)

NodeJS學習系列課程筆記(NodeJs Stream 的相關使用方法)

這裡寫圖片描述

流的操作,在很多語言中存在,比如Java中的Inputsteam , outputStream 等等,在nodejs中, Stream也 是一個抽象介面,Node 中有很多物件實現了這個介面。例如,對http 伺服器發起請求的request 物件就是一個 Stream,還有stdout(標準輸出)。

對於Stream流有一下四中型別:

  1. Readable - 可讀操作。
  2. Writable - 可寫操作。
  3. Duplex - 可讀可寫操作。
  4. Transform - 操作被寫入資料,然後讀出結果。

常用的時間型別操作有幾下幾種:

  1. data - 當有資料可讀時觸發。
  2. end - 沒有更多的資料可讀時觸發。
  3. error - 在接收和寫入過程中發生錯誤時觸發。
  4. finish - 所有資料已被寫入到底層系統時觸發。
/**
 * Created by Richard on 7/14/16.
 */
var fs = require('fs');
var data = '';

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

readerStream.setEncoding('UTF8');

readerStream.on('data', function(chunk) {
    data +=chunk;
});

readerStream.on
('end', function() { console.log(data); }); readerStream.on('error', function(err) { console.log(err); }); console.log('完畢');

上面程式碼中主要用到幾個時間包括data on err.

下面我們在來嘗試一下建立一個寫入流:

/**
 * Created by Richard on 7/14/16.
 */
const fs = require('fs');

var data = 'My name is Richad Jiang Bo';

var writerStream = fs.createWriteStream('output.txt'
); writerStream.write(data, 'UTF8'); writerStream.end(); writerStream.on('finish', () => { "use strict"; console.log('寫入完成'); }); writerStream.on('error', err => { "use strict"; console.log(err); }); console.log('執行完畢');

在上面程式碼中我們應用到了finish事件。

接下來我們在嘗試建立一個管道流的示例:

/**
 * Created by Richard on 7/14/16.
 */
const fs = require('fs');

const readerStream = fs.createReadStream('my.txt');

const writeStream = fs.createWriteStream('my2.txt');

readerStream.pipe(writeStream);

對於stream的應用,在nodejs中http模組,同樣被應用到, 會在後續部落格中更新。