Node-stream

stream是僅在服務(wù)器端可用的模塊,目的是支持流這種數(shù)據(jù)結(jié)構(gòu)
流的特點是數(shù)據(jù)有序,而且必須是依次讀取或者依次寫入,不能像數(shù)組那樣隨機(jī)定位,有標(biāo)準(zhǔn)輸入流和標(biāo)準(zhǔn)輸出流
在Nodejs中,流是一個對象,我們只需要響應(yīng)流的事件就可以了,data事件 表示流已經(jīng)可以讀取了,end事件表示這個流已經(jīng)到末尾了,沒有數(shù)據(jù)可以讀取了,error事件表示出錯了
'use strict'

//下面是一個從文件流讀取文本內(nèi)容的示例
var fs = require('fs');
//打開一個流
var rs = fs.createReadStream('sample.txt','utf-8');
rs.on('data',function(chunk){
    console.log('DATA:');
    console.log(chunk);
});
rs.on('end',function(){
    console.log('end');
});
rs.on('error',function(err){
    console.log(err);
});

要注意,data事件可能會有多次,每次傳遞的chunk是流的一部分是數(shù)據(jù);
要以流的形式寫入文件,只需要不斷調(diào)用write()方法,最后以end結(jié)束

fs = require('fs');
var ws1 = fs.createWriteStream('output1.txt','utf-8');
ws1.write('使用Stream寫入文本數(shù)據(jù)....\n');
ws1.write('end');
ws1.end();

var ws2 = fs.createWriteStream('output2.txt');
ws2.write(new Buffer('使用Stream寫入二進(jìn)制數(shù)據(jù)...\n','utf-8'))
ws2.write(new Buffer('END','utf-8'));
ws2.end();

所有可以讀取數(shù)據(jù)的流都繼承自Stream.Readable,所有可以寫入的流都集成Stream.Writeable
pipe
管子,運(yùn)輸;把一個可讀的流Readable和一個可寫的流Writeable串起來后,所有的數(shù)據(jù)自動從Readable流入到Writeable流
這種操作叫pipe
在Node.js中,Readable流有一個pipe()方法,就是用來干這件事的。
讓我們用pipe()把一個文件流和另一個文件流串起來,這樣源文件的所有數(shù)據(jù)就自動寫入到目標(biāo)文件里了,所以,這實際上是一個復(fù)制文件的程序:

var fs = require('fs');
var rs = fs.createReadStream('sample.txt');
var ws = fs.createWriteStream('copied,txt');
rs.pipe(ws);

默認(rèn)情況下,當(dāng)readable流的數(shù)據(jù)讀取完畢,end事件觸發(fā)后,將自動關(guān)閉Writeable流,如果我們不希望自動關(guān)閉Writeable流,需要傳入?yún)?shù):
rs.pipe(ws,{end:false})

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容