java.io.Serializableインタフェースはフィールド及びメソッドが無く、直列化可能であるという意味を識別する機能だけを備えている。オブジェクトを直列化するクラスは、java.io.Serializableインタフェースを実装する必要がある。
直列化(シリアライズ)とは、オブジェクトをストリーム(1バイトずつ読み書きできるバイト列)に変換することである。ストリームからオブジェクトに変換することはデシリアライズと呼ぶ。
serialVersionUIDとは、オブジェクトを直列化した際に、出力したオブジェクトがどのクラスを元に作成されたのかを検証するための番号である。また、同一クラスであってもソースコードに変更が加えられた場合、既に出力されているオブジェクトと新しく出力しようとしているオブジェクトは同一のクラスを元に作成されたとは言えなくなる。よって、クラスのバージョンを識別するための番号でもある。
serialVersionUIDを生成するには、serialverコマンドを使用する。
serialver.exe [-classpath classpath] [-show] [classname...]
EclipseはserialVersionUIDを自動生成する機能を持っている。
なし
なし
java.io.Serializableインタフェースを実装したクラスの例を示す。
import java.io.Serializable;
public class RegisterForm implements Serializable {
// シリアライズ可能クラスに対して付与するバージョン番号
private static final long serialVersionUID = 1L;
}
次に示すクラスが java.io.Serializable インタフェースを実装している。