STDIN
から入力を読み取る場合は、常にScanner
オブジェクトを使用しています。最近私はBufferedInputStream
hereを読んで、BufferedInputStreamが入力を読み込む最速の方法だと読んでいました。 Scanner
には、integer
nextInt()
を読み、byte nextByte()
を読む、string next()
などを読む) 現在、私はいくつかの文字列(最大100000文字)といくつかの整数を読んでいます。これらの整数によれば、私はさらにSTDIN
から入力を受け取るforループを実行します。以下は、私がBufferedInputStream
でしかしNOW-Scanner内でBufferedInputStreamを使用しているときに面倒です
Scanner sc = new Scanner(System.in);
int numOfStr = sc.nextInt();
String inputStr[] = new String[numOfStr];
for (int i = 0; i < numOfStr; i++) {
inputStr[i] = sc.next();
}
}
まで使用コードスニペットがあり、我々は唯一のread()
が入力を読み込む必要があります。だから私はどのように入力を区別することができますか?上記のScanner
に相当するコードBufferedInputStream
を書き留めてください。私はクラスを使用して、私がread()
から得ているデータにトークン化する必要がありますか?これで、全体がScanner
より遅くなります(STDIN
からの入力を読むこと)。
私はBufferedReaderがBufferedInputStreamをラップし、これらの便利なメソッドを提供すると信じています。しかし、キーボードから読んでいるのであれば、スピードはほとんど問題ではありません。なぜなら、最も速い人間の入力でさえ、最も粗末なリーダーを除いて、すべてのスピードよりはるかに遅いからです。この場合、私は(個人的に)Scannerを使用することの単純さが、バッファされたリーダーを使用することによる想像上のパフォーマンス向上を上回ると考えています。 – jpm
@jpm:キーボードと混同しないでください。これは 'STDIN'ソースとすることができます。 –