【Java】シリアライズ / デシリアライズ

サンプル

Person.java

* 「Serializable」インタフェースを実装する
import java.io.Serializable;

public class Person implements Serializable {
  private static final long serialVersionUID = -6612003848170755512L;

  private String name;
  private int age;

  public Person(String name, int age) {
    this.name = name;
    this.age = age;
  }

  public String getName() {
    return this.name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public int getAge() {
    return this.age;
  }

  public void setAge(int age) {
    this.age = age;
  }
}

DeSerializeSample.java

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;

public class DeSerializeSample {
  @SuppressWarnings("unchecked")
  public static void main(String[] args) throws IOException {
    ObjectOutputStream objectOutputStream = null;
    ObjectInputStream objectInputStream = null;
    try {
      List<Person> people = new ArrayList<Person>();
      Person person1 = new Person("Ken", 62);
      people.add(person1);

      Person person2 = new Person("Coco", 10);
      people.add(person2);

      // オブジェクトを丸ごと、ファイルに保存する「シリアライズ」(serialize)
      objectOutputStream = new ObjectOutputStream(new FileOutputStream("people.obj"));
      objectOutputStream.writeObject(people);
      objectOutputStream.flush();

      // 元のデータ形式に復元する「デシリアライズ」(deserialize)
      objectInputStream = new ObjectInputStream(new FileInputStream("people.obj"));
      List<Person> newPeople = (List<Person>) objectInputStream.readObject();

      // 出力
      for (Person person : newPeople) {
        System.out.println(person.getName() + "(" + person.getAge() + ")");
      }

      System.out.println("Done");
    } catch (Exception ex) {

    } finally {
      if (objectOutputStream != null) {
        objectOutputStream.close();
      }
      if (objectInputStream != null) {
        objectInputStream.close();
      }
    }
  }
}

出力結果

コンソール画面

Ken(62)
Coco(10)
Done

補足

 * 出力されるファイル「people.obj」は、バイナリーっぽい。
 * XMLで汎用的にはシリアライズ / デシリアライズしたい場合は、以下の関連記事を参照のこと
http://blogs.yahoo.co.jp/dk521123/32099558.html