プログラミング応用b 第5回 『ファイル入出力の基礎1』-02 入出力ストリームの基礎と分類 |
■2. 入出力ストリームの基礎と分類
■2.1 ストリームのオープン・クローズ
ストリームは,ストリームオブジェクトと呼ばれる専用のオブジェクトによって管理され
る(Fig.1)。ストリームオブジェクトは,生成時にコンストラクタで指定された入出力の対象
をストリームに結びつけ,データ入出力の準備を行う。この作業を,ストリームのオープン
(open)と言う。オープンされたストリームに対しては,読み書きなどの操作が可能になる。
入出力する必要が無くなったら,入出力先とストリームの関連づけを解除し,ストリームを
閉じる。この作業をストリームのクローズ(close)と呼ぶ。ストリームをクローズするには,
ストリームオブジェクトに用意されているclose( )メソッドを使用する。
Javaのオブジェクトは参照されなくなった段階で,自動的にメモリ領域が解放されるよう
になっているが,そのときにストリームオブジェクトはストリームのクローズを自動的に
行う。しかし,入出力の必要が無くなったストリームは,close( )メソッドを利用して,でき
るだけ早い段階で明示的にクローズするべきである。たとえば,オペレーティングシステムに
よっては,同時に開くことのできるファイルの上限数が制限されている場合があり,ストリー
ムのクローズが遅れれば,他のプログラムでファイルが開けなくなったりすることが起こりえ
るからである。
まとめると,ストリームの入出力の手順は,
(1)ストリームのオープン (ストリームオブジェクトの生成)
(2)ストリームを使った入出力
(3)ストリームのクローズ
という3段階になる。
■2.2 4系統の入出力ストリーム
ではまず,ストリームを扱うために,ストリームオブジェクトのクラス群をざっとながめて
みよう。ストリーム関係のクラス群は,java.ioというパッケージにまとめられている。ioとは,
Input/Outputの略である。
さて,Fig.1にあるように,ストリームによる入出力では,
・入力には入力用ストリームを
・出力用には出力用のストリームを
使用する。つまり,入力ストリーム用のクラスと,出力ストリーム用のクラスがあることになる。
また,ストリームに入出力するデータが,
・テキストを構成する文字データか
・画像や数値データのようなバイト単位のバイナリデータ(バイトデータと言う)か
という違いもある。バイトデータの入出力ではバイトごとにデータの入出力を行うが,「文字」
というものは,文字コードによって,同じ文字が1バイトで表現されていたり,2バイトで表現
されていたりするので,単純にバイト単位で入出力をするわけにはいかないのである。
つまり,ストリームの種類は
入出力の2系統 × バイト・文字の2系統
の計4系統のストリームに大きく分類できることになる(下表)。
入力系統ストリーム | 出力系統ストリーム | |
バイトデータ (今回解説する) | (1) バイトデータ入力系統ストリーム | (2) バイトデータ出力系統ストリーム |
文字データ (次回解説する) | (3) 文字データ入力系ストリーム | (4) 文字データ出力系ストリーム |
今回は,4系統のストリーム群のうち,バイトデータ入出力系の2系統(入力と出力)の
ストリーム群(上表で黄色の部分)について見ていこう。