4.2. java.io.ObjectOutput, java.io.ObjectOutputStream
「ObjectOutput」はオブジェクトの書き込みを行うクラスが実装すべき機能を定めたインタフェースです。「writeObject」メソッドで、「Serializable」インタフェースを実装したクラスのインスタンスを直列化します。また「ObjectOutput」は「DataOutput」のサブインタフェースで、基本データ型を出力するメソッドも提供しています。
「ObjectOutputStream」は「ObjectOutput」インタフェースを実装している唯一のクラスです。オブジェクトの出力を行う場合にはこのクラスを使用します。
ObjectOutput out=new ObjectOutputStream(new FileOutputStream("dog.obj")); Dog dog=new Dog("pochi",10); out.writeObject(dog); out.flush(); out.close();
「ObjectOutputStream」のコンストラクタが取る引数は「OutputStream」です。ファイルへオブジェクトを書き込む場合には「FileOutputStream」を使用します。他の「OutputStream」クラスを使用することにより、ネットワークやシリアルケーブルなど、他のアウトプットターゲットに出力する事もできます。
「writeObject」メソッドでオブジェクトの書き込みを行います。複数回使用することにより、複数のオブジェクトを書き込むこともできます。書き込むオブジェクトは同じクラスのインスタンスでなくても構いません。ただし書き込む順番で読み込みも行われるので、順番には気をつける必要があります。
(実習課題2)
以下のプログラムを作成しなさい。
- 実習課題1で作成したクラスのオブジェクトをファイルへ書き込むプログラム
- 書き込むファイルは、標準入力から指定できるようにする事。プログラムの引数として指定してはいけない。
- 書き込むオブジェクトは2つ以上。
ファイルにどのように書き込まれているか確認してみる事。
4.3. java.io.ObjectInput, java.io.ObjectInputStream
「ObjectInput」は「ObjectOutput」の逆で、オブジェクトの読み込みを行うクラスが実装すべき機能を定めたインタフェースです。「readObject」メソッドでオブジェクトの読み込みを行います。また「DataInput」のサブインタフェースで、基本データ型の読み込みもサポートしています。
「ObjectInputStream」は「ObjectInput」を実装したクラスで、オブジェクトの読み込みを実現します。
ObjectInputStream in=new ObjectInputStream(new FileInputStream("dog.obj")); Dog dog=(Dog)in.readObject(); in.close();
コンストラクタの引数は「InputStream」です。ファイルからの読み込みを行う場合には、「FileInputStream」を使用します。他のクラスを使用することにより、ネットワークなど他の入力ソースからオブジェクトの読み込みを実現する事ができます。
「readObject」メソッドでオブジェクトの読み込みを行います。返り値は「Object」なので、適切なクラスにキャストする必要があります。もし読み込むオブジェクトが無かった場合には「ClassNotFoundException」例外を発生します。
(実習課題3)
以下のプログラムを作成しなさい。
- 実習課題1で作成したオブジェクトを読み込むプログラム。読み込んだオブジェクトを標準出力に表示する事。
- 読み込むファイルは標準入力から指定する事。プログラムの実行時に引数として指定するのは不可。
- 読み込むオブジェクトは2つ以上。