鍍金池/ 教程/ HTML/ Node.js流
Node.js快速入門
Node.js事件發(fā)射器
Node.js包(JXcore)
Node.js事件循環(huán)
Node.js文件系統(tǒng)
Node.js npm
Node.js安裝和入門
Node.js工具模塊
Node.js回調(diào)概念
Node.js流
Node.js入門實例程序
Node.js教程
Node.js規(guī)范化應(yīng)用
Node.js REPL終端
Node.js緩沖器
Node.js RESTful API
Node.js全局對象
Linux安裝Node.js(源碼編譯安裝)
Node.js Web模塊
Node.js Express框架

Node.js流

什么是流?

流是可以從一個源讀取或?qū)懭霐?shù)據(jù)到連續(xù)的目標(biāo)對象。在Node.js,有四種類型的數(shù)據(jù)流。

  • Readable - 其是用于讀操作。

  • Writable - 用在寫操作。

  • Duplex - 其可以用于讀取和寫入操作。

  • Transform - 輸出基于輸入的地方進行計算的一種雙相流。

每種類型的流是一個EventEmitter實例,并拋出的時代不同的實例幾個事件。例如,一些常用的事件是:

  • data - 當(dāng)有數(shù)據(jù)可讀取此事件。

  • end - 當(dāng)沒有更多的數(shù)據(jù)讀取此事件被觸發(fā)。

  • error - 當(dāng)有任何錯誤或接收數(shù)據(jù)寫入此事件。

  • finish - 當(dāng)所有數(shù)據(jù)已刷新到底層系統(tǒng)觸發(fā)此事件

本教程將讓您了解關(guān)于數(shù)據(jù)流的常用操作。

從流中讀取

創(chuàng)建一個名為input.txt的文本文件有以下內(nèi)容

Yiibai Point is giving self learning content
to teach the world in simple and easy way!!!!!

創(chuàng)建一個js文件名為main.js里面有如下代碼:

var fs = require("fs");
var data = '';

// Create a readable stream
var readerStream = fs.createReadStream('input.txt');

// Set the encoding to be utf8. 
readerStream.setEncoding('UTF8');

// Handle stream events --> data, end, and error
readerStream.on('data', function(chunk) {
   data += chunk;
});

readerStream.on('end',function(){
   console.log(data);
});

readerStream.on('error', function(err){
   console.log(err.stack);
});

console.log("Program Ended");

現(xiàn)在運行main.js看到的結(jié)果:

$ node main.js

驗證輸出

Program Ended
Yiibai Point is giving self learning content
to teach the world in simple and easy way!!!!!

寫入流

創(chuàng)建一個js文件名為main.js的文件,里面有如下代碼:

var fs = require("fs");
var data = 'Simply Easy Learning';

// Create a writable stream
var writerStream = fs.createWriteStream('output.txt');

// Write the data to stream with encoding to be utf8
writerStream.write(data,'UTF8');

// Mark the end of file
writerStream.end();

// Handle stream events --> finish, and error
writerStream.on('finish', function() {
    console.log("Write completed.");
});

writerStream.on('error', function(err){
   console.log(err.stack);
});

console.log("Program Ended");

現(xiàn)在運行main.js看到的結(jié)果:

$ node main.js

驗證輸出

Program Ended
Write completed.

現(xiàn)在打開在當(dāng)前目錄中創(chuàng)建output.txt文件,驗證output.txt文件中有以下內(nèi)容。

Simply Easy Learning

管道流

管道是我們提供一個流的輸出作為輸入到另一個流的機制。它通常被用于從一個流中獲取數(shù)據(jù),并通過該流輸出到另一個流。沒有對管道的操作沒有限制?,F(xiàn)在,我們將展示一個管道從一個文件中讀取和寫入到另一個文件的例子。

創(chuàng)建一個js文件名為main.js里面有如下代碼:

var fs = require("fs");

// Create a readable stream
var readerStream = fs.createReadStream('input.txt');

// Create a writable stream
var writerStream = fs.createWriteStream('output.txt');

// Pipe the read and write operations
// read input.txt and write data to output.txt
readerStream.pipe(writerStream);

console.log("Program Ended");

現(xiàn)在運行main.js看到的結(jié)果:

$ node main.js

驗證輸出

Program Ended

在當(dāng)前目錄打開所創(chuàng)建的output.txt文件,并驗證output.txt文件中有以下內(nèi)容。

Yiibai Point is giving self learning content
to teach the world in simple and easy way!!!!!

鏈?zhǔn)搅?/h2>

鏈?zhǔn)绞且粋€機制,一個流的輸出連接到另一個流,并創(chuàng)建一個鏈多流操作。它通常用于管道的操作。現(xiàn)在,我們將使用管道和鏈接先壓縮文件,然后解壓縮。

創(chuàng)建一個js文件名為main.js里面有如下代碼:

var fs = require("fs");
var zlib = require('zlib');

// Compress the file input.txt to input.txt.gz
fs.createReadStream('input.txt')
  .pipe(zlib.createGzip())
  .pipe上一篇:Node.js包(JXcore)下一篇:Node.js規(guī)范化應(yīng)用