ふとしたときにScannerクラスの存在を知ったので,
違いと個々の使い分け法記します.
また,説明する際に使用するテキストファイル内容は
test.txt
Hello World 1 2 3 おはよう!を使用します.
・BufferedReaderクラス使用
コード例
try { BufferedReader in = new BufferedReader(new FileReader(textAd)); String line; while ((line = in.readLine()) != null) { System.out.println(line); } in.close(); } catch (IOException er) { System.out.println(er.getMessage()); }
・Scannerクラス使用
try { File file = new File(textAd); Scanner ScanFile = new Scanner(file); while (ScanFile.hasNextLine()) { System.out.println(ScanFile.nextLine()); } ScanFile.close(); } catch (IOException er) { System.out.println(er.getMessage()); }
上記のプログラムを個々に100回繰り返した時の時間を比較したところ,
BufferedReaderクラス : 0.015秒
Scannerクラス : 0.062秒
Scannerクラスのほうが遅いことがわかる.
では,Scannerクラスを利用するメリットはないかといえば,そうではありません.
メリット1 キーボード入力
Scanner scan = new Scanner(System.in); String line = scan.next(); System.out.println(line); line = scan.next(); System.out.println(line);実行結果(入力: hello world)
hello world
メリット2 型指定キーボード入力
int line = scan.nextInt(); System.out.println(line); line = scan.nextInt(); System.out.println(line);
実行結果(入力:123 456
123 456
以上のようにBufferedReaderを使用した場合、よりScannerを利用した方がコードは簡潔にすることが可能です。
暗黙的に2つに分けると決めていたのですが、実際使用する場合は、
while (scan.hasNextInt()) { int line = scan.nextInt(); System.out.println(line); }と、書くといいかもしれません。
また、使用する際はExceptionが発生した場合に対処するためtry文なりthrowなりで対策する必要があります。
参考資料
Scanner
BufferedReader
0 件のコメント:
コメントを投稿