web-dev-qa-db-ja.com

BufferedReader vs Console vs Scanner

こんにちは、私はJavaが初めてで、コンソールでユーザー入力を読み取るための最良の選択は何かを知りたいと思っています。

  1. Console console = System.console();
  2. BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
  3. Scanner reader = new Scanner(System.in);

どちらを選ぶべきですか?なぜ他の人ではなく、その人ですか?

BufferedReader

  • Java 1.1
  • チェック例外をスローします
  • 文字、文字配列、行を読み取ることができます
  • 速い

スキャナー

  • Java 1.5
  • チェック済み例外をスローしません
  • 行、空白で区切られたトークン、正規表現で区切られたトークン、および数値を読み取ることができます
  • 難しい 単一の文字を読む

コンソール

  • Java 1.6
  • チェック済み例外をスローしません
  • 行を読むことができます
  • 基になるリーダー は文字と文字配列を読み取ることができます(行の境界で停止します)
  • 常に利用できるわけではありません(例 Eclipse
  • パスワードを読み取ることができます(つまり、文字を表示せずに読み取ります)

推奨:スキャナー

数値を読み取る方法は非常に便利です。例外はチェックされていないため、定型的なtry/catchブロックを記述する必要はありません。

53
tom

これらのほかに、datainputstreamなども使用できます。

現在、BufferedReaderは、文字入力ストリームからテキストを読み取り、文字、配列、および行の効率的な読み取りを提供するために文字をバッファリングします。バッファサイズを指定するか、デフォルトサイズを使用できます。デフォルトは、ほとんどの目的に十分な大きさです。

Scannerは、正規表現を使用してプリミティブ型と文字列を解析できる単純なテキストスキャナーです。 Scannerは、デフォルトで空白に一致する区切り文字パターンを使用して、入力をトークンに分割します。結果のトークンは、さまざまなnextメソッドを使用して異なるタイプの値に変換できます。スキャナーは、ストリームのコンテンツからトークンを解析するために使用されますが、BufferedReaderはストリームを読み取るだけで、特別な解析は行いません。

また、以下のリンクを確認してください。

http://www.javawebtips.com/50474/

4
roanjain

コンソールクラスは、コンソール入力を処理するプラットフォームに依存しない方法を実装しようとします。すべてのOSには何らかの方法でコンソールがありますが、実装は静かです。そのため、コンソールクラスはJava platfrom独立したランタイムクラスを提供して、パスワード入力などにアクセスします。

スキャナーは、ストリームのコンテンツからトークンを解析するために使用されますが、BufferedReaderはストリームを読み取るだけで、特別な解析は行いません。

3
Juned Ahsan