標籤: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(流)