0

STDINから入力を読み取る場合は、常にScannerオブジェクトを使用しています。最近私はBufferedInputStreamhereを読んで、BufferedInputStreamが入力を読み込む最速の方法だと読んでいました。 Scannerには、integernextInt()を読み、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からの入力を読むこと)。

+1

私はBufferedReaderがBufferedInputStreamをラップし、これらの便利なメソッドを提供すると信じています。しかし、キーボードから読んでいるのであれば、スピードはほとんど問題ではありません。なぜなら、最も速い人間の入力でさえ、最も粗末なリーダーを除いて、すべてのスピードよりはるかに遅いからです。この場合、私は(個人的に)Scannerを使用することの単純さが、バッファされたリーダーを使用することによる想像上のパフォーマンス向上を上回ると考えています。 – jpm

+0

@jpm:キーボードと混同しないでください。これは 'STDIN'ソースとすることができます。 –

答えて

1

BufferedInputStreamはデータを解析しません。データを読み込むだけです。バッファされたリーダーをスキャナクラスに渡し、そこから解析することができます。

+0

詳細を教えてもらえますか?私の 'Scanner'コードに相当する' BufferedInputStream'コードを書き留めていただければ幸いです。 –

0

Javaチュートリアルのchapter on streamsをご覧ください。さまざまなタイプのストリーム、その目的、使用法について説明します。

しかし、ユーザーからの入力を読み取るときに読み取り操作が高速でなければならない理由はわかりません。ユーザは、キーボードからの入力を読み取るために使用する方法よりもはるかに遅く入力します(桁違いに遅くなります)。

+0

キーボードを 'STDIN'ソースに置き換えてください。 'STDIN'は何でもかまいません。 [このページ](http://www.codechef.com/wiki/java)は、 'Scanner'の代わりに' BufferedInputStream'を使うようにしています。 –

+0

質問を編集して「キーボード」という言葉を削除して、より明確にすることができます。 –

関連する問題