I/O packageの要点まとめ。

色々種類がありすぎて、学部生が混乱してると思う。ちなみに俺も><
とりあえず簡単に「これはこのために使う」だけでも押さえておく。

I/O packageとは

Program に対する入出力(IO)を扱う機能をまとめたもの。
データの種類によって使うクラスが異なる。

Streamとは。

入出力のデータの流れのことをStreamという。
川の流れと考えるとわかりやすい。
Javaはファイルの種類によって異なるStreamを定義することによって
データのやり取りを可能にする。

Javaで読み込めるStreamの種類

Character Streamと Byte Stream。
Characterは16bit UTF-16文字。
たとえばHTMLファイル。
Byteは8bit。文字として認めないもの。
例えば、画像や音声ファイル。

Byte Stream

基本となるクラスはInputStreamとOutputStream。

InputStreamはbyteを特定のデータ元を読み込むクラスのスーパークラス
OutputStreamはbyteを特定のデータ先に書きこむクラスのスーパークラス

Byteを扱うほとんどのストリームはこのクラスのメソッドをオーバーライドして
ストリームごと適切に実装を変更している。

Character Stream

基本となるクラスはReaderとWriter。Byte Streamの時と同様、

ReaderはCharacterを特定のデータ元を読み込むクラスのスーパークラス
WriterはCharacterを特定のデータ先に書きこむクラスのスーパークラス

文字を扱うほとんどのストリームはこのクラスのメソッドをオーバーライドして
ストリームごと適切に実装を変更している。

InputStreamReader,OutputStreamWriter

CharacterとByte間の変換を行う変換ストリーム。
指定、あるいはローカルシステムのデフォルトエンコーディングを使う。

InputStreamReaderはbyte -> Character(UTF-16)
OutputStreamWriterはCharacter(UTF-16)->byte

BufferedReader,BufferedWriter

Bufferedストリ−ムはバッファリングを追加。
バッファリングがいまだによく分らないが、
つまり

read(),write()するとき、毎回いちいちファイルにアクセスする必要がなくなる。

ということらしい。
これらのクラスはFile Streamと一緒に使用されることが多い。
なぜならディスクファイルへのアクセスは、メモリバッファを使用するより非常に遅いから。
つまりバッファイリングとはディスクではなくメモリに記憶して読み込み速度を上げるってことか?

DataOutputStream, DataInputStream

ストリームを通して、特定の型(ex int,char,double and so on) を送りたい時に使う。
それぞれFilterOutputStream,FileterInputStreamを継承している。

Fileを扱うストリーム

  • FileInputStream
  • FileOutputStream
  • FileReader
  • FileWriter

File Streamは4種類。
普通はBufferedReader,BufferedWriterでバッファリングしてから使う。

Fileクラスはファイルに対して操作するクラス。実際にはパスを示している。
混同しないように。

RandomAccessFile

File ストリームよりも高度な実装が出来る。
その大きな特徴がファイルポインタ。ファイルポインタはインデックス(ファイルのどの位置かを指す)。
指定したファイルポインタから読み込んだり出力したりできる。


全然まとめになってないがこの辺で・・・
本参考にしながら書くとそっちに文章が全部持ってかれるし、自分で全然理解出来てない。
読む->まとめるの流れが自然なのに読みながらまとめようとしてるし。
めんどくさがり屋はダメだね。