2017-01-13 10 views
2

stdin(10^5のスペースで区切られた数字)から大きな入力を読み取ることができなければなりません。 10^3以上の入力とreadlineはそれを読み取るのに200秒かかりますが、5秒以内に入力できるようにする必要があります。 readline以外のものを使うべきか、readlineのバッファなどを増やす方法がありますか?あなたがさえprocess.stdinに書き込み可能なストリームを添付するpipe()を使用することができます何をしたいのかに応じて、ノードで標準入力から大きな入力を読み取る

+0

process.stdinを直接使って疲れましたか? 'readline'は仕事の間違ったツールに見えます。 –

答えて

2

readlineは、錫に書かれているように、行を読むように設計されています。あなたのスペースで区切られた数字は(おそらく)1つの非常に長い行にあるので、readlineが問題を抱えているのは驚くことではありません。

これはTransform streamで解決するのはかなり簡単ですが、誰かがすでにあなたのために仕事をしているので、あなたがする必要はありません。 split2モジュールを見てみましょう。モジュールはデータストリームを受け取り、指定された区切り文字で分割します。あなたはこのようにそれを使用します。私のマシン上で

const split2 = require('split2'); 

process.stdin 
    .pipe(split2(' ')) 
    .pipe(process.stdout); 

(MacBook Proの、インテルCore i7プロセッサー)を、上記0.41s10万ためのスペースで区切られた数字および1,000,000数字のために2.06sを要します。

もちろん、それはひどく役に立たない。

const split2 = require('split2'); 
let sum = 0; 

process.stdin.pipe(split2(' ')) 
    .on('data', data => sum += parseInt(data, 10)) 
    .on('end',() => console.log('Sum: %d', sum)); 

私のマシンでは0.28秒、1.87秒では1e5の合計をとっています。 (おそらくそれは出力が1行しか書かれておらず、STDOUTへの書き込みはintを解析して追加するよりも明らかに高価です)

関連する問題