このブログを検索

9.23.2010

[Java]Scanner VS BufferedReader

ファイル入力の際にいつもBufferedReaderクラスしか使ったことなかったですが,
ふとしたときにScannerクラスの存在を知ったので,
違いと個々の使い分け法記します.

また,説明する際に使用するテキストファイル内容は
test.txt
1Hello World
21 2 3
3おはよう!
を使用します.

・BufferedReaderクラス使用
コード例
01try {
02   BufferedReader in = new BufferedReader(new FileReader(textAd));
03   String line;
04   while ((line = in.readLine()) != null) {
05    System.out.println(line);
06   }
07   in.close();
08  } catch (IOException er) {
09   System.out.println(er.getMessage());
10  }

・Scannerクラス使用
01try {
02   File file = new File(textAd);
03   Scanner ScanFile = new Scanner(file);
04   while (ScanFile.hasNextLine()) {
05    System.out.println(ScanFile.nextLine());
06   }
07   ScanFile.close();
08  } catch (IOException er) {
09   System.out.println(er.getMessage());
10  }

上記のプログラムを個々に100回繰り返した時の時間を比較したところ,
BufferedReaderクラス : 0.015秒
Scannerクラス     : 0.062秒

Scannerクラスのほうが遅いことがわかる.
では,Scannerクラスを利用するメリットはないかといえば,そうではありません.

メリット1 キーボード入力
1Scanner scan = new Scanner(System.in);
2String line = scan.next();
3System.out.println(line);
4line = scan.next();
5System.out.println(line);
実行結果(入力: hello world)
1hello
2world

メリット2 型指定キーボード入力
1int line = scan.nextInt();
2System.out.println(line);
3line = scan.nextInt();
4System.out.println(line);

実行結果(入力:123 456

以上のようにBufferedReaderを使用した場合、よりScannerを利用した方がコードは簡潔にすることが可能です。
暗黙的に2つに分けると決めていたのですが、実際使用する場合は、
1while (scan.hasNextInt()) {
2 int line = scan.nextInt();
3 System.out.println(line);
4}
と、書くといいかもしれません。
また、使用する際はExceptionが発生した場合に対処するためtry文なりthrowなりで対策する必要があります。

参考資料
Scanner
BufferedReader

0 件のコメント:

コメントを投稿