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