Java
 Computer >> コンピューター >  >> プログラミング >> Java

JavaのScannerクラスとBufferReaderクラスの違い


ScannerとBufferReaderはどちらも、外部システムからの入力を読み取るために使用されます。スキャナーは通常、入力が文字列型またはプリミティブ型であることがわかっている場合に使用され、BufferReaderは、文字を効率的に読み取るために文字をバッファリングしながら文字ストリームからテキストを読み取るために使用されます。以下は、ScannerクラスとBufferReaderクラスの重要な違いです。

スキャナークラス
Sr。いいえ。
キー
BufferReaderクラス
1
同期
スキャナーは本質的に同期していないため、シングルスレッドの場合にのみ使用する必要があります。
BufferReaderは本質的に同期しています。マルチスレッド環境では、BufferReaderを使用する必要があります。
2
バッファメモリ
スキャナーには1KBのcharバッファーのバッファーがほとんどありません。
BufferReaderには、Scannerと比較して8KBバイトの大きなバッファーがあります。
3
処理速度
スキャナーはデータも解析する必要があるため、少し遅くなります。
BufferReaderは、文字ストリームのみを読み取るため、Scannerよりも高速です。
4
メソッド
スキャナーにはnextInt()、nextShort()などのメソッドがあります。
BufferReaderには、parseInt()、parseShort()などのメソッドがあります。
5
読み取り行
スキャナーには、行を読み取るためのメソッドnextLine()があります。
BufferReaderには、行を読み取るためのメソッドreadLine()があります。

スキャナーとBufferReaderの例

JavaTester.java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
public class JavaTester {
   public static void main(String args[]) throws NumberFormatException, IOException {
      BufferedReader bufferReader = new BufferedReader(new InputStreamReader(System.in));
      System.out.println("Enter an number:");
      int a = Integer.parseInt(bufferReader.readLine());
      System.out.printf("You entered: " + a);
      Scanner scanner = new Scanner(System.in);
      System.out.println("\nEnter an number:");
      a = scanner.nextInt();
      System.out.printf("You entered: " + a);
   }
}

出力

Enter an number:
1
You entered: 1
Enter an number:
2
You entered: 2

  1. Javaでのシリアル化と外部化の違い

    シリアル化と外部化はどちらも、オブジェクトをストリームバイトに変換し、バイトストリームをデータベースまたはメモリに格納するプロセスです。 java.io.Serializableインターフェイスを実装するクラスはシリアル化できます。一方、アプリケーションの要件に基づいてカスタムシリアル化に使用される外部化。外部化はjava.io.Serializableを拡張します。 Sr。いいえ。 キー シリアル化 外部化 1 インターフェース シリアル化はマーカーインターフェイスです 外部化には、readExternalメソッドとwriteExternalメソッドの2つのメソ

  2. Javaでのイテレータと列挙の違い

    IteratorとEnumerationはどちらも、コレクションの要素をトラバースしてアクセスするためのカーソルです。どちらもコレクションフレームワークに属しています。列挙は、コレクションフレームワークのJDK1.2バージョンのJDK1.0およびIteratorで追加されました。 コレクション内の要素への読み取り専用アクセス権があるため、列挙型はコレクション内の構造を変更できません。次の方法があります: * hasMoreElements() * nextElement() 一方、イテレータはコレクション内の要素を読み取って削除できます。以下の方法があります- * hasNe