Javaシリアライゼーションでどう実装されるか
Javaのシリアライゼーションとは、オブジェクトをバイトストリームに変換して、ネットワーク上で転送したりファイルに保存したりできる仕組みです。必要に応じて、バイトストリームから元のオブジェクトを再構築できます。Javaのシリアライゼーションは、次のような手順で実装できます。
- シリアライズ化可能なインターフェイスを実装: Javaクラスをシリアライズできるようにするには、シリアライズ可能なインターフェイスを実装する必要があります。このインターフェイスはマーカーインターフェイスで、実装する必要があるメソッドはありません。
- バージョン番号の追加:バージョン管理に用いられるプライベートな静的定数 serialVersionUID を、シリアライズする必要があるクラスに追加します。
- 書き込み先:ObjectOutputStreamストリームへのオブジェクトの書き込みによりシリアライズが実現されています。実装には以下のようなコードが利用されています。
try {
FileOutputStream fileOut = new FileOutputStream("object.ser");
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(object);
out.close();
fileOut.close();
} catch (IOException e) {
e.printStackTrace();
}
- 読み取り用オブジェクト:オブジェクトの逆シリアル化は、オブジェクトInputStream からバイトストリームを読み取り、オブジェクトに変換することで実行されます。次のコードを使用して実装できます:
try {
FileInputStream fileIn = new FileInputStream("object.ser");
ObjectInputStream in = new ObjectInputStream(fileIn);
Object object = in.readObject();
in.close();
fileIn.close();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
オブジェクトをシリアライズするには、そのオブジェクトのすべての参照型のメンバ変数がシリアライズ可能である必要があるので注意しましょう。シリアライズ不可能なメンバ変数がある場合は、transientとして宣言するとシリアライズの対象から除外されます。