4. オブジェクトのシリアライズ
入出力(java.io) 4章 オブジェクトのシリアライズ
4.1. java.io.Serializable
任意のクラスのデータをファイルに保存したり、ファイルから復元したりする事が考えられます。独自に保存・復元のプログラムを記述する事も可能ですが、Javaでは簡単にこの仕組みを実現できる機能が提供されています。この章ではその機能について説明します。
あるクラスのオブジェクトが保存・復元できる事を、「直列化可能である」と言います。また保存・復元できるかどうかを「直列化可能性」と呼びます。Javaではクラスを直列化可能にするためには、「java.io.Serializable」インタフェースを実装する必要があります。
「Serializable」インタフェースには何のメソッドも定義されていません。このインタフェースを「implements」宣言に加えるだけで、該当するクラスは直列化可能になります。
public class Dog implements Serializable{ private int age; private String name; .... }
サンプルクラス「Dog」は直列化可能です。Javaでは「static」でないメンバ変数を直列化しますので、「Dog」のインスタンス変数「age」「name」の値は保存・復元されます。もし直列化したくないインスタンス変数がある場合は「transient」キーワードを使用します。
public class Cat implements Serializable{ private int age; private String name; private transient String nickName; .... }
上のクラス「Cat」の場合は、変数「nickName」の値は直列化されません。
(実習課題1)
以下のクラスを作成しなさい。プログラムとして実行できなくて良い。
- 「Serializable」インタフェースを実装する
- メンバ変数は3つ以上、持つようにする
- 「transient」キーワードを持つメンバ変数を1つは持つようにする