Node Stream

流的概念

  1. 流是一組有序的,有起點和終點的字節(jié)數(shù)據(jù)傳輸手段
  2. 它不關(guān)心文件的整體內(nèi)容陈惰,只關(guān)注是否從文件中讀到了數(shù)據(jù)疏咐,以及讀到數(shù)據(jù)之后的處理
  3. 流是一個抽象接口,被 Node 中的很多對象所實現(xiàn)阐肤。比如HTTP 服務(wù)器request和response對象都是流凫佛。

流的種類

  1. Readable - 可讀的流 (如 fs.createReadStream());
  2. Writable - 可寫的流 (如 fs.createWriteStream());
  3. Duplex -
    可讀寫的流 (如 net.Socket);
  4. Transform - 在讀寫過程中可以修改和變換數(shù)據(jù)的 Duplex 流 (如 zlib.createDeflate());

可讀流Readable

可讀流分為兩種,flowing模式和paused模式,主要區(qū)別就是paused有緩沖區(qū)的概念孕惜,而flowing沒有

在 flowing 模式下愧薛, 可讀流自動從系統(tǒng)底層讀取數(shù)據(jù),并通過 EventEmitter 接口的事件盡快將數(shù)據(jù)提供給應(yīng)用衫画。

在 paused 模式下毫炉,必須顯式調(diào)用 stream.read() 方法來從流中讀取數(shù)據(jù)片段。
所有初始工作模式為 paused 的 Readable 流碧磅,可以通過下面三種途徑切換到 flowing 模式:

  1. 監(jiān)聽 'data' 事件
  2. 調(diào)用 stream.resume() 方法
  3. 調(diào)用 stream.pipe() 方法將數(shù)據(jù)發(fā)送到 Writable

flowing模式

const fs = require('fs')
const path = require('path')
const rs = fs.createReadStream(path.join(__dirname, './1.txt'))

rs.setEncoding('utf8')

rs.on('data', (data) => {
    console.log(data)
})

paused模式

const fs = require('fs')
const path = require('path')
const rs = fs.createReadStream(path.join(__dirname, './1.txt'))

rs.setEncoding('utf8')

rs.on('readable', () => {
    let d = rs.read(1)
    console.log(d)
})

可寫流writeable

實現(xiàn)了stream.Writable接口的對象來將流數(shù)據(jù)寫入到對象中

const fs = require('fs')
const path = require('path')
const ws = fs.createWriteStream(path.join(__dirname, './1.txt'))

ws.write('123')
ws.end('456')

對于Duplex碘箍,Transfor個人覺得會用就好了,理解也很容易鲸郊,多看看api就好

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末丰榴,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子秆撮,更是在濱河造成了極大的恐慌四濒,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,002評論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件职辨,死亡現(xiàn)場離奇詭異盗蟆,居然都是意外死亡,警方通過查閱死者的電腦和手機舒裤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,357評論 3 400
  • 文/潘曉璐 我一進店門喳资,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人腾供,你說我怎么就攤上這事仆邓∠侍玻” “怎么了?”我有些...
    開封第一講書人閱讀 169,787評論 0 365
  • 文/不壞的土叔 我叫張陵节值,是天一觀的道長徙硅。 經(jīng)常有香客問我,道長搞疗,這世上最難降的妖魔是什么嗓蘑? 我笑而不...
    開封第一講書人閱讀 60,237評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮匿乃,結(jié)果婚禮上桩皿,老公的妹妹穿的比我還像新娘。我一直安慰自己扳埂,他們只是感情好业簿,可當我...
    茶點故事閱讀 69,237評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著阳懂,像睡著了一般梅尤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上岩调,一...
    開封第一講書人閱讀 52,821評論 1 314
  • 那天巷燥,我揣著相機與錄音,去河邊找鬼号枕。 笑死缰揪,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的葱淳。 我是一名探鬼主播钝腺,決...
    沈念sama閱讀 41,236評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼赞厕!你這毒婦竟也來了艳狐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,196評論 0 277
  • 序言:老撾萬榮一對情侶失蹤皿桑,失蹤者是張志新(化名)和其女友劉穎毫目,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诲侮,經(jīng)...
    沈念sama閱讀 46,716評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡镀虐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,794評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了沟绪。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片刮便。...
    茶點故事閱讀 40,928評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖绽慈,靈堂內(nèi)的尸體忽然破棺而出诺核,到底是詐尸還是另有隱情抄肖,我是刑警寧澤,帶...
    沈念sama閱讀 36,583評論 5 351
  • 正文 年R本政府宣布窖杀,位于F島的核電站,受9級特大地震影響裙士,放射性物質(zhì)發(fā)生泄漏入客。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,264評論 3 336
  • 文/蒙蒙 一腿椎、第九天 我趴在偏房一處隱蔽的房頂上張望桌硫。 院中可真熱鬧,春花似錦啃炸、人聲如沸铆隘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,755評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽膀钠。三九已至,卻和暖如春裹虫,著一層夾襖步出監(jiān)牢的瞬間肿嘲,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,869評論 1 274
  • 我被黑心中介騙來泰國打工筑公, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留雳窟,地道東北人。 一個月前我還...
    沈念sama閱讀 49,378評論 3 379
  • 正文 我出身青樓匣屡,卻偏偏與公主長得像封救,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子捣作,可洞房花燭夜當晚...
    茶點故事閱讀 45,937評論 2 361

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

  • stream 流是一個抽象接口誉结,在 Node 里被不同的對象實現(xiàn)。例如 request to an HTTP se...
    明明三省閱讀 3,412評論 1 10
  • 概念 Stream 是Node.js中最重要的組件和模式之一虾宇,之前在社區(qū)中看到這樣一句格言“Stream all ...
    Macchiato_go閱讀 598評論 0 0
  • http://www.reibang.com/p/81b032672223 為什么應(yīng)該使用流 你可能看過這樣的代...
    流動碼文閱讀 265評論 0 1
  • 流的基本概念及理解 流是一種數(shù)據(jù)傳輸手段搓彻,是有順序的,有起點和終點嘱朽,比如你要把數(shù)據(jù)從一個地方傳到另外一個地方流非常...
    October_yang閱讀 7,696評論 3 9
  • 太陽中風旭贬,陽浮而陰弱,陽浮者搪泳,熱自發(fā)稀轨,陰弱者,汗自出岸军,嗇嗇惡寒奋刽,淅淅惡風瓦侮,翕翕發(fā)熱,鼻鳴干嘔者佣谐,桂枝湯主之肚吏。...
    永遠的joker閱讀 1,921評論 0 3