Day 6 Node.js Stream(流)

Stream 是一個(gè)抽象接口公给,Node 中有很多對象實(shí)現(xiàn)了這個(gè)接口姚糊。例如遏弱,對http 服務(wù)器發(fā)起請求的request 對象就是一個(gè) Stream蜒灰,還有stdout(標(biāo)準(zhǔn)輸出)弦蹂。

圖片.png
  • <h1>從流中讀取數(shù)據(jù)
var fs=require('fs');
var data='';
//創(chuàng)建可讀流
var readerStream=fs.createReadStream('input.txt');
//設(shè)置編碼為utf-8
readerStream.setEncoding('UTF-8');
//處理流事件-->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("程序執(zhí)行完畢");

運(yùn)行結(jié)果:

程序執(zhí)行完畢
菜鳥教程官網(wǎng)地址:www.runoob.com

  • <h1>寫入流
var fs = require("fs");
var data = '菜鳥教程官網(wǎng)地址:www.runoob.com';

// 創(chuàng)建一個(gè)可以寫入的流,寫入到文件 output.txt 中
var writerStream = fs.createWriteStream('output.txt');

// 使用 utf8 編碼寫入數(shù)據(jù)
writerStream.write(data,'UTF8');

// 標(biāo)記文件末尾
writerStream.end();

// 處理流事件 --> data, end, and error
writerStream.on('finish', function() {
    console.log("寫入完成强窖。");
});

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

console.log("程序執(zhí)行完畢");

  • <h1>管道流
圖片.png

如上面的圖片所示凸椿,我們把文件比作裝水的桶,而水就是文件里的內(nèi)容翅溺,我們用一根管子(pipe)連接兩個(gè)桶使得水從一個(gè)桶流入另一個(gè)桶脑漫,這樣就慢慢的實(shí)現(xiàn)了大文件的復(fù)制過程。
以下實(shí)例我們通過讀取一個(gè)文件內(nèi)容并將內(nèi)容寫入到另外一個(gè)文件中咙崎。

var fs = require("fs");

// 創(chuàng)建一個(gè)可讀流
var readerStream = fs.createReadStream('input.txt');

// 創(chuàng)建一個(gè)可寫流
var writerStream = fs.createWriteStream('output.txt');

// 管道讀寫操作
// 讀取 input.txt 文件內(nèi)容优幸,并將內(nèi)容寫入到 output.txt 文件中
readerStream.pipe(writerStream);

console.log("程序執(zhí)行完畢");
  • <h1>鏈?zhǔn)搅?/li>

鏈?zhǔn)绞峭ㄟ^連接輸出流到另外一個(gè)流并創(chuàng)建多個(gè)對個(gè)流操作鏈的機(jī)制。鏈?zhǔn)搅饕话阌糜诠艿啦僮鳌?/p>

接下來我們就是用管道和鏈?zhǔn)絹韷嚎s和解壓文件叙凡。

創(chuàng)建 compress.js 文件, 代碼如下

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

// 壓縮 input.txt 文件為 input.txt.gz
fs.createReadStream('input.txt')
  .pipe(zlib.createGzip())
  .pipe(fs.createWriteStream('input.txt.gz'));
  
console.log("文件壓縮完成劈伴。");

執(zhí)行完以上操作后,我們可以看到當(dāng)前目錄下生成了 input.txt 的壓縮文件 input.txt.gz握爷。

接下來跛璧,讓我們來解壓該文件,創(chuàng)建 decompress.js 文件新啼,代碼如下:

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

// 解壓 input.txt.gz 文件為 input.txt
fs.createReadStream('input.txt.gz')
  .pipe(zlib.createGunzip())
  .pipe(fs.createWriteStream('input.txt'));
  
console.log("文件解壓完成追城。");
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市燥撞,隨后出現(xiàn)的幾起案子座柱,更是在濱河造成了極大的恐慌,老刑警劉巖物舒,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件色洞,死亡現(xiàn)場離奇詭異,居然都是意外死亡冠胯,警方通過查閱死者的電腦和手機(jī)火诸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來荠察,“玉大人置蜀,你說我怎么就攤上這事奈搜。” “怎么了盯荤?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵馋吗,是天一觀的道長。 經(jīng)常有香客問我秋秤,道長宏粤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任航缀,我火速辦了婚禮商架,結(jié)果婚禮上堰怨,老公的妹妹穿的比我還像新娘芥玉。我一直安慰自己,他們只是感情好备图,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布灿巧。 她就那樣靜靜地躺著,像睡著了一般揽涮。 火紅的嫁衣襯著肌膚如雪抠藕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天蒋困,我揣著相機(jī)與錄音盾似,去河邊找鬼。 笑死雪标,一個(gè)胖子當(dāng)著我的面吹牛零院,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播村刨,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼告抄,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了嵌牺?” 一聲冷哼從身側(cè)響起打洼,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎逆粹,沒想到半個(gè)月后募疮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡僻弹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年阿浓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奢方。...
    茶點(diǎn)故事閱讀 40,090評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡搔扁,死狀恐怖爸舒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情稿蹲,我是刑警寧澤扭勉,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站苛聘,受9級特大地震影響涂炎,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜设哗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一唱捣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧网梢,春花似錦震缭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至烦感,卻和暖如春巡社,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背手趣。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工晌该, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人绿渣。 一個(gè)月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓朝群,卻偏偏與公主長得像,于是被迫代替她去往敵國和親怯晕。 傳聞我的和親對象是個(gè)殘疾皇子潜圃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)舟茶,斷路器谭期,智...
    卡卡羅2017閱讀 134,659評論 18 139
  • Node.js Stream(流) Stream 是一個(gè)抽象接口,Node 中有很多對象實(shí)現(xiàn)了這個(gè)接口吧凉。例如隧出,對h...
    FTOLsXD閱讀 606評論 0 2
  • Node.js Stream(流)Stream 是一個(gè)抽象接口,Node 中有很多對象實(shí)現(xiàn)了這個(gè)接口阀捅。例如胀瞪,對ht...
    yyshang閱讀 224評論 0 1
  • 01凄诞、Stream 是一個(gè)抽象接口圆雁,Node 中有很多對象實(shí)現(xiàn)了這個(gè)接口。例如帆谍,對http 服務(wù)器發(fā)起請求的req...
    夜幕小草閱讀 182評論 0 1
  • https://nodejs.org/api/documentation.html 工具模塊 Assert 測試 ...
    KeKeMars閱讀 6,336評論 0 6