どんちゃんのひまつぶし

とあるスタートアップにいるエンジニアの雑多ブログ

Java勉強日記 ~Scanner.inとBufferedReaderの違いって?~

f:id:d0nchan:20180302153711j:plain
昨日、プロゲートで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を使うべきか。