process.stdin的end事件如何觸發(fā)?---關于nodejs底層的標準輸入與輸出的坑

最近想用js來寫一點簡單的算法題三圆,node是使用process.stdin和process.stdout來實現(xiàn)標準輸入和輸出的,我的目標是實現(xiàn)****循環(huán)輸入****浆劲,遇到?jīng)]有輸入時嫌术,輸入結束。聽起來好像很簡單牌借,那么接下來我們就來試試度气。

官方文檔

首先我們去看看官方文檔

process.stdin

代碼如下

process.stdin.setEncoding('utf8');

process.stdin.on('readable', () => {
  var chunk = process.stdin.read();
  if (chunk !== null) {
    process.stdout.write(`data: ${chunk}`);
  }
});

process.stdin.on('end', () => {
  process.stdout.write('end');
});

運行這段程序,接著輸入膨报,結果如下磷籍,變成了無無限循環(huán)的輸入,無論怎么輸入都無法觸發(fā)'end'事件现柠。

Paste_Image.png

這是為什么呢院领?
我們繼續(xù)去查閱官方文檔

Paste_Image.png

文檔里寫著:當完成沒有內容輸入時就可以觸發(fā)'end'事件。
看到這里够吩,感覺前面的代碼并沒有錯比然,那么為什么他不會結束循環(huán)輸入呢?

我們把代碼修改如下:

process.stdin.setEncoding('utf8');

process.stdin.on('readable', () => {
  var chunk = process.stdin.read();
  if(typeof chunk === 'string'){
    process.stdout.write(`stringLength:${chunk.length}\n`);
  }
  if (chunk !== null) {
    process.stdout.write(`data: ${chunk}`);
  }
});

process.stdin.on('end', () => {
  process.stdout.write('end');
});

運行結果如下:

Paste_Image.png

當輸入一個字符的時候字符串長度為3周循,之后都是字符串長度加2强法,這是什么原因呢?
你還記得你每次輸入結束之后都要敲的回車鍵嗎湾笛?回車鍵的字符就是'\n'
知道問題的原因就好解決了饮怯,既然加了回車字符,那么我們就將回車字符去掉嚎研,最簡單的方法當然是切片蓖墅。

chunk = chunk.slice(0,-2);
Paste_Image.png

現(xiàn)在的數(shù)據(jù)就沒問題了。

原代碼修改如下:

process.stdin.setEncoding('utf8');

process.stdin.on('readable', () => {
  var chunk = process.stdin.read();
  if(typeof chunk === 'string'){
    chunk = chunk.slice(0,-2);
    process.stdout.write(`stringLength:${chunk.length}\n`);
  }
  if(chunk === ''){
    process.stdin.emit('end');
    return
  }
  if (chunk !== null) {
    process.stdout.write(`data: ${chunk}\n`);
  }
});

process.stdin.on('end', () => {
  process.stdout.write('end');
});

就可以做到當沒有輸入時觸發(fā)'end'事件临扮。

Paste_Image.png

如果要做字符串處理就在end事件內執(zhí)行论矾。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市杆勇,隨后出現(xiàn)的幾起案子拇囊,更是在濱河造成了極大的恐慌,老刑警劉巖靶橱,帶你破解...
    沈念sama閱讀 223,126評論 6 520
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡关霸,警方通過查閱死者的電腦和手機传黄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,421評論 3 400
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來队寇,“玉大人膘掰,你說我怎么就攤上這事〖亚玻” “怎么了识埋?”我有些...
    開封第一講書人閱讀 169,941評論 0 366
  • 文/不壞的土叔 我叫張陵,是天一觀的道長零渐。 經(jīng)常有香客問我窒舟,道長,這世上最難降的妖魔是什么诵盼? 我笑而不...
    開封第一講書人閱讀 60,294評論 1 300
  • 正文 為了忘掉前任惠豺,我火速辦了婚禮,結果婚禮上风宁,老公的妹妹穿的比我還像新娘洁墙。我一直安慰自己,他們只是感情好戒财,可當我...
    茶點故事閱讀 69,295評論 6 398
  • 文/花漫 我一把揭開白布热监。 她就那樣靜靜地躺著,像睡著了一般饮寞。 火紅的嫁衣襯著肌膚如雪孝扛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,874評論 1 314
  • 那天骂际,我揣著相機與錄音疗琉,去河邊找鬼。 笑死歉铝,一個胖子當著我的面吹牛盈简,可吹牛的內容都是我干的。 我是一名探鬼主播太示,決...
    沈念sama閱讀 41,285評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼柠贤,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了类缤?” 一聲冷哼從身側響起臼勉,我...
    開封第一講書人閱讀 40,249評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎餐弱,沒想到半個月后宴霸,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體囱晴,經(jīng)...
    沈念sama閱讀 46,760評論 1 321
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,840評論 3 343
  • 正文 我和宋清朗相戀三年瓢谢,在試婚紗的時候發(fā)現(xiàn)自己被綠了畸写。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,973評論 1 354
  • 序言:一個原本活蹦亂跳的男人離奇死亡氓扛,死狀恐怖枯芬,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情采郎,我是刑警寧澤千所,帶...
    沈念sama閱讀 36,631評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站蒜埋,受9級特大地震影響淫痰,放射性物質發(fā)生泄漏。R本人自食惡果不足惜理茎,卻給世界環(huán)境...
    茶點故事閱讀 42,315評論 3 336
  • 文/蒙蒙 一黑界、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧皂林,春花似錦朗鸠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,797評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至沟启,卻和暖如春忆家,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背德迹。 一陣腳步聲響...
    開封第一講書人閱讀 33,926評論 1 275
  • 我被黑心中介騙來泰國打工芽卿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人胳搞。 一個月前我還...
    沈念sama閱讀 49,431評論 3 379
  • 正文 我出身青樓卸例,卻偏偏與公主長得像,于是被迫代替她去往敵國和親肌毅。 傳聞我的和親對象是個殘疾皇子筷转,可洞房花燭夜當晚...
    茶點故事閱讀 45,982評論 2 361

推薦閱讀更多精彩內容

  • https://nodejs.org/api/documentation.html 工具模塊 Assert 測試 ...
    KeKeMars閱讀 6,341評論 0 6
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法悬而,內部類的語法呜舒,繼承相關的語法,異常的語法笨奠,線程的語...
    子非魚_t_閱讀 31,669評論 18 399
  • ¥開啟¥ 【iAPP實現(xiàn)進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程袭蝗,因...
    小菜c閱讀 6,453評論 0 17
  • 偶然看到以前寫的東西還挺有深度的 現(xiàn)在就跟個女流氓一樣 哪兒有什么正能量全是硬挺過來的 老板到腥,八二年的疙瘩湯記得放...
    孫孫孫孫孫我是孫孫哦閱讀 451評論 0 1
  • 好久不見 一個深夜眨八,想寫點什么。 最近一直再看《歡樂頌》左电,嗯,一邊看一邊在豆瓣看影評页响。
    莫唯筱閱讀 200評論 0 0