Java stream

Java Stream

 * バイトストリームはInputStream, OutputStreamの継承クラスをつかう.
 * FileInputStream
 * 文字ストリームはReader, Writerの継承クラスを使う.
 * バイトストリームから文字ストリームに入力 : InputStreamReader
 * 文字ストリームをバイトストリームに出力 : OutputStreamWriter
 * BufferedReader
 * PrintWriter

例 : 読み込み
標準入力(System.in)はInputStreamなので、文字列として取り込むには、以下の順で流す. System.in (InputStream) => InputStreamReader => BufferedReader

プログラムはBufferedReaderとやりとりするのでコードは以下の様になる.

ファイルの読み込み FileInputStream => InputStreamReader => BufferedReader


 * FileReaderというのもあるが、これはファイルの中身をメモリ上に一度吸い上げるのでOutOfMemoryが出る. 悪いやり方である.

例 : 書き出し
標準出力(System.out)はPrintStreamである. これはバイトストリームであるOutputStreamに、さまざまなデータ値（例えば数値など）の表現を簡易的に出力する機能を追加したものである. だから大抵の場合printやprintlnに直接データを渡せばよい.

ファイルへの書き出しはPrintWriterをつかう. これは文字ストリームであるWriterにさまざまなデータ値（例えば数値など）の表現を簡易的に出力する機能を追加したものである. 以下の用に渡す. 文字ストリームであるFileWriterが書き込みしてくれる. （メモリの問題は？） PrintWriter => BufferedWriter => FileWriter プログラムはPrintWriterとやりとりするので、オブジェクトの作成は以下の様になることに注意. (読み込みの時とは逆）

例 : Gzipされたファイルの読み込みと書き出し
java.util.zipのGZIPInputStream, GZIPOutputStreamを使う.

FileInputStream => GZIPInputStream => InputStreamReader => BufferedReader

PrintWriter => BufferedWriter => OutputStreamWriter => GZIPOutputStream => FileOutputStream