iT邦幫忙

2021 iThome 鐵人賽

DAY 10
0
自我挑戰組

學習NodeJS的30天系列 第 10

Day10 NodeJS-Pipe

Day9的時候說明了Stream(串流)和Buffer(緩衝)的概念,今天作為延伸來看一下Pipe。

Pipe的概念

藉由從一個串流讀取資料並寫入另一個串流以連結兩個串流的概念就是Pipe,在NodeJS中可以透過將讀取串流Pipe到寫入串流,讓讀取串流上的Chunk(資料片段)可以連結到寫入串流並輸出,也可以透過讀寫字串進行多次的Pipe。

https://ithelp.ithome.com.tw/upload/images/20210925/2013998022gVnsCd47.jpg

從程式碼來理解

Pipe的作用其實就是把讀取串流讀取的資料片段交給寫入串流輸出,如果不使用Pipe,可以透過讀取串流註冊的data事件讀取資料片段後,再由寫入串流的write輸出資料到檔案,下面分別為不使用Pipe與運用Pipe函式的程式碼,以Day9使用的測試資料為例。

不使用Pipe

let fs = require("fs");

//建立讀取串流與寫入串流
let readable = fs.createReadStream(__dirname + "/data.txt");
let writable = fs.createWriteStream(__dirname + "/copy.txt");

//註冊data事件
readable.on("data", function(chunk){
  console.log(chunk);
  //將chunk寫入目標檔案
  writable.write(chunk);
});

使用Pipe

let fs = require("fs");

let readable = fs.createReadStream(__dirname + "/data.txt");
let writable = fs.createWriteStream(__dirname + "/copy.txt");

readable.pipe(writable);

所以pipe()函式的概念可以從程式碼中更清楚的理解,而透過NodeJS中建立好的pipe()又可以再次的讓程式碼變的簡潔。

小小題外話

這十天下來對NodeJS有個小小的感想,覺得NodeJS是個適合快樂開發的JS執行環境,許多功能都建立在模組中,省去一些繁瑣的開發部份,還有一些為了便利開發衍生出來的概念,要寫文章前都要先確定一下與JS有關或是互相關聯的概念是不是有寫過、需不需要另外寫...總之明天開始要進入下一個階段,開始了解伺服器端的邏輯與架構,今天也謝謝大家。


上一篇
Day9 NodeJS-Buffer與Stream
下一篇
Day11 Internet-Protocol
系列文
學習NodeJS的30天30

尚未有邦友留言

立即登入留言