前項で直列化してファイルに出力した data というファイルから Book オブジェクトを復元して標準出力に toString メソッドの戻り値を表示するプログラムです。 例外を一つずつ catch しているので長くなっていますがオブジェクトへの復元は ObjectInputStream オブジェクトを作成したら下の1行のみです。
Book book = (Book)in.readObject();標準出力には
Book title:きまぐれロボット author:星新一と表示されます。
/******************** DeserializationSample.java ********************/
import java.io.*;
public class DeserializationSample {
public static void main(String[] args) {
ObjectInputStream in = null;
try {
in = new ObjectInputStream(new BufferedInputStream(
new FileInputStream("data")));
//このメソッドでファイル(とロードされているクラス)から復元
Book book = (Book)in.readObject();
System.out.println(book);
} catch (InvalidClassException e) {
//(java.io.ObjectStreamExceptionのサブクラス)
//クラスの直列化バージョンが、ストリームから読み込まれた
//クラス記述子の直列化バージョンと一致しない場合
//クラスに未知のデータ型が含まれている場合
//クラスに、アクセス可能な引数なしのコンストラクタがない場合
System.out.println( "復元に失敗 - " + e);
} catch (StreamCorruptedException e) {
//(java.io.ObjectStreamExceptionのサブクラス)
//オブジェクトストリームから読み込まれた制御情報が、
//内部整合性検査に違反していた場合にスローされます。
System.out.println( "復元に失敗 - " + e);
} catch (OptionalDataException e) {
//(java.io.ObjectStreamExceptionのサブクラス)
//プリミティブデータが読み込まれていないか、
//またはデータの終わりがストリーム内の直列化オブジェクトに
//あるため、オブジェクトの読み込み操作が失敗したことを示す例外
System.out.println( "復元に失敗 - " + e);
} catch (IOException e) {
//入出力に関連した例外
System.out.println( "復元に失敗 - " + e);
} catch (ClassNotFoundException e) {
//直列化されたオブジェクトのクラスが見つからなかった場合
System.out.println( "復元に失敗 - " + e);
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {}
}
}
}
}
/**************************** Book.java ****************************/
public class Book implements java.io.Serializable {
protected String title;
protected String author;
public Book() {}
public Book(String title, String author) {
this.title = title;
this.author = author;
}
//--------------------------------------------------------------------
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
//--------------------------------------------------------------------
public String toString() {
return "Book title:" + title + " author:" + author;
}
}