無涯教程網:Stream流是使您可以連續地從源讀取數據或將數據寫入目標的對象,在Node.js中,有四種類型的流-
-
Readable - 用於讀取操作的流。
-
Writable - 用於寫操作的流。
-
Duplex - 可用於讀取和寫入操作的流。
-
Transform - 一種雙工流,其中基於輸入來計算輸出。
每種類型的流都是一個 EventEmitter 實例,例如,一些常用事件是-
-
data - 當有可讀取的數據時,將觸發此事件。
-
end - 當沒有更多數據可讀取時,將觸發此事件。
-
error - 接收或寫入數據時發生任何錯誤。
-
finish - 當所有數據都已刷新到系統時,將觸發此事件。
本教程提供了對流上常用操作的基本瞭解。
讀取流
創建一個名爲input.txt的文本文件,其內容如下:
Tutorials Point is giving self learning content to teach the world in simple and easy way!!!!!
使用以下代碼創建一個名爲main.js的js文件-
var fs=require("fs");var data='';//Create a readable streamvar 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");
現在運行main.js以查看輸出-
$node main.js
驗證輸出。
Program EndedTutorials Point is giving self learning content to teach the world in simple and easy way!!!!!
寫入流
使用以下代碼創建一個名爲main.js的js文件-
var fs=require("fs");var data='Simply Easy Learning';//Create a writable streamvar 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");
現在運行main.js以查看輸出-
$node main.js
驗證輸出。
Program EndedWrite completed.
現在打開在當前目錄中創建的output.txt;它應包含以下內容-
Simply Easy Learning
管道流
管道是一種機制,我們將一個流的輸出作爲另一流的輸入,它通常用於從一個流中獲取數據並將該流的輸出傳遞到另一流,管道操作沒有限制。現在,我們將展示一個管道示例,該示例用於讀取一個文件並將其寫入另一個文件。
使用以下代碼創建一個名爲main.js的js文件-
var fs=require("fs");//Create a readable streamvar readerStream=fs.createReadStream('input.txt');//Create a writable streamvar 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");
現在運行main.js以查看輸出-
$node main.js
驗證輸出。
Program Ended
打開在當前目錄中創建的output.txt;它應包含以下內容-
Tutorials Point is giving self learning content to teach the world in simple and easy way!!!!!
鏈接流
鏈接是一種將一個流的輸出連接到另一流並創建多個流操作的鏈的機制,通常用於管道操作,現在,我們將使用管道和鏈接來壓縮文件,然後將其解壓縮
使用以下代碼創建一個名爲main.js的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(fs.createWriteStream('input.txt.gz')); console.log("File Compressed.");
現在運行main.js以查看輸出-
$node main.js
驗證輸出。
File Compressed.
您會發現input.txt已被壓縮,並在當前目錄中創建了文件input.txt.gz。現在讓我們嘗試使用以下代碼解壓縮同一文件-
var fs=require("fs");var zlib=require('zlib');//Decompress the file input.txt.gz to input.txt fs.createReadStream('input.txt.gz') .pipe(zlib.createGunzip()) .pipe(fs.createWriteStream('input.txt')); console.log("File Decompressed.");
現在運行main.js以查看輸出-
$node main.js
驗證輸出。
File Decompressed.
https://www.learnfk.com/article-nodejs/nodejs_streams