昨日、プロゲートで2週間ぶりぐらいにJavaを勉強しました。
やらなきゃマジで忘れますねやばい。
で、レッスンを進めていると「入力を受け取ろう」という単元へ。
「あ~!、これ前に研修書籍で読んだやつや!」
それに関しては以前のこの記事通りです。
www.d0nchan.com
Progateの場合
6行目の
Scanner scanner = new Scanner(System.in);
を使い、「これから文字入力するよー!」と合図(準備)を出し、
11行目の
scanner.next()
で入力された文字列を受け取っています。
研修書籍の場合
6,7行目の
BufferedReader br = new BufferedReader( new InputStreamReader(System.in));
で入力の合図(準備)
10,12行目の
br.readLine()
で入力されて文字列を受け取っています。
二つの違いはなんだろう?
やってることは同じやし、これなんの違いがあるん?と思いました。
ということでググってみた。
違いその1「処理速度」
「java bufferedreader scanner 違い」でググって1番に出たのがこのページ
allex0421.blogspot.com
7年以上も前の記事で初心者にとっては少し優しくない内容ですが、bufferedreaderを使う方が処理速度が速いようです。
簡潔なプログラムではどちらでも良いですが、入出力を多用する大きなプログラムではscannerは避けた方が方が良いということですかね。
違いその2「簡潔さ」
先ほどの裏返しになりますが、bufferedreaderを使えば処理時の速度は速いですが、例外処理をする必要があるそうです。
たとえば、上記のコードの場合、文字列として入力されたものを一度整数型(Int)に変換してから計算の処理をしています。
このとき、数字が入力されるのが前提ですが、もしもアルファベットや記号が入力されたら…?
そんなコンピューターが困ってしまうような例外事例を処理してあげます。
処理方法はまだよくわかってないのでこれはまた今度。
じゃあscannerは例外処理しなくていいの?
と思います(僕も思いました)。
すみません、今の僕にはそこんとこよくわかりませんでした><
詳しい人教えてください!
まとめ
とりあえず書くだけならScannerの方を使った方がよさそう。
本格的に業務で使うならBufferedReaderを使うべきか。