Cならscanfとかgetcharで済む入力が、Javaではいろいろややこしいです。
でも、慣れてくるとよくできてるなぁ、って思わされます。
-
文字列入力はReader / Writer, データ入力はInputStream / OutputStream
だから、一般的によくある「端末やファイルから文字列を読み込む」ならReaderを作らないといけない。
しかし、標準入力そのものや、ネットワーク入力そのものはInputStreamになっている。
例 : 標準入力のInputStreamはSystem.inというInputStreamです
-
データ入力から文字列入力に変換するにはInputStreamReaderを用いる。
使い方は、InputStreamをInputStreamReaderのコンストラクタに突っ込んで生成すればよい。
例 : InputStreamReader isr = new InputStreamReader(System.in);
-
データファイルを読み込むときによくある「一行読む」みたいなことをするには、
前もってたくさん読み込んで改行があるかないか、みたいなことを調べないといけない。
これをBufferingといい、BufferedReaderを使うことで実現される。
使い方は、別のReaderをコンストラクタに突っ込んで生成すればよい。
例 : BufferedReader br = new BufferedReader(isr);
上の例で、isrは上で作ったInputStreamReaderです。
-
まとめると、「端末やファイルから一行読む」って操作は以下のようになる。
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
int i = 0;
while(br.ready()){
String str = br.readLine();
System.out.println("The " + i++ + "th line : " + str);
}
ま、普通はまとめて書きます。
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
…しかし、この字面をいきなりり見ても訳わかんないよなぁ…
-
でもうれしいのは、この仕組みを理解すればどんな入力でも簡単なこと。
上のほうに書いてあるURLConnectionも、よく見ると上のSystem.inがurlc.getInputStream()になってるだけです。
[an error occurred while processing this directive]