今日の自分を支える 技術→マネジメント

技術職→管理職になりました

【Java】直列化でクラスの情報をファイルに書き込む

直列化を行うと、現在のクラスの情報をファイルに書き出すことができる。
異常の再現とかに使うのだろうか?

直列化する方法

// 直列化したいクラスでSerializableを実装する
public class Test implements Serializable {

  // シリアルバージョンID
  // クラス設計が変更になった場合に値を変更すること
  // でなければ変更前に直列化していたファイルを復元した際に矛盾が生じた場合、例外検知できなくなる
  private static filal long serialVersionUID = 81923983183821L;

  private String a;
  private String b;
  // TestSubクラスのデータも書込みたければTestSubクラスもSerializableを実装する
  private TestSub t;
  : 
}

// 保存方法
Test test = new Test("あ","べ");
FIleOutputStream fos = new FileOutputStream("C:\\test.dat");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oosWriteObject(test);
oos.flush();
oos.close();

// 復元方法
FileInputStream fis = new FileInputStream("C:\\test.dat");
ObjectInputStream ois = new ObjectInputStream(fis);
Test test2 = (Test) ois.readObject(); 
ois.close();

注意事項

・Serializableを実装していないクラス型のフィールドは直列化されない ・staticがついたフィールドは直列化の対象にならない ・transientキーワードで修飾したフィールドは直列化の対象にならない