【node.js】Stream(流)

來源:互聯網
上載者:User

標籤:for   stream   編碼   --   div   檔案壓縮   讀取   接收   pip   

Stream 有四種流類型:

Readable - 可讀操作。

Writable - 可寫操作。

Duplex - 可讀可寫操作.

Transform - 操作被寫入資料,然後讀出結果。

所有的 Stream 對象都是 EventEmitter 的執行個體。常用的事件有:

data - 當有資料可讀時觸發。

end - 沒有更多的資料可讀時觸發。

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

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

從流中讀取資料

建立 input.txt 檔案,內容如下:

菜鳥教程官網地址:www.runoob.com

建立 main.js 檔案, 代碼如下:

var fs = require("fs");var data = ‘‘;// 建立可讀流var readerStream = fs.createReadStream(‘input.txt‘);// 設定編碼為 utf8。readerStream.setEncoding(‘UTF8‘);// 處理流事件 --> data, end, and errorreaderStream.on(‘data‘, function(chunk) {   data += chunk;});readerStream.on(‘end‘,function(){   console.log(data);});readerStream.on(‘error‘, function(err){   console.log(err.stack);});console.log("程式執行完畢");

寫入流

var fs = require("fs");var data = ‘菜鳥教程官網地址:www.runoob.com‘;// 建立一個可以寫入的流,寫入到檔案 output.txt 中var writerStream = fs.createWriteStream(‘output.txt‘);// 使用 utf8 編碼寫入資料writerStream.write(data,‘UTF8‘);// 標記檔案末尾writerStream.end();// 處理流事件 --> data, end, and errorwriterStream.on(‘finish‘, function() {    console.log("寫入完成。");});writerStream.on(‘error‘, function(err){   console.log(err.stack);});console.log("程式執行完畢");

管道流

管道提供了一個輸出資料流到輸入資料流的機制。通常我們用於從一個流中擷取資料並將資料傳遞到另外一個流中。如將input.txt中的內容寫到output.txt中

var fs = require("fs");// 建立一個可讀流var readerStream = fs.createReadStream(‘input.txt‘);// 建立一個可寫流var writerStream = fs.createWriteStream(‘output.txt‘);// 管道讀寫操作// 讀取 input.txt 檔案內容,並將內容寫入到 output.txt 檔案中readerStream.pipe(writerStream);console.log("程式執行完畢");
鏈式流

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

接下來我們就是用管道和鏈式來壓縮和解壓檔案。

建立 compress.js 檔案, 代碼如下:

var fs = require("fs");var zlib = require(‘zlib‘);// 壓縮 input.txt 檔案為 input.txt.gzfs.createReadStream(‘input.txt‘)  .pipe(zlib.createGzip())  .pipe(fs.createWriteStream(‘input.txt.gz‘));  console.log("檔案壓縮完成。");
var fs = require("fs");var zlib = require(‘zlib‘);// 解壓 input.txt.gz 檔案為 input.txtfs.createReadStream(‘input.txt.gz‘)  .pipe(zlib.createGunzip())  .pipe(fs.createWriteStream(‘input.txt‘));  console.log("檔案解壓完成。");

 

【node.js】Stream(流)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.