Revised: Mar./23rd/2002
オブジェクトの直列化 (Object Serialization) とは、オブジェクトとそこから参照されているオブジェクトを、バイトストリームにコード化することです。このことによって、基本データ型、文字列型の入出力ストリームと同様に、オブジェクトを入出力することが出来ます。
オブジェクトを出力ストリームで書き込むことを直列化 (serialize)、入力ストリームから読み込んでオブジェクトに復元することを直列化復元 (deserialize) と呼びます。 JavaVM の外部に対して、オブジェクトを入出力する仕組みだと考えて良いでしょう。
直列化/直列化復元という言葉は直感的ではないのですが、 SunMicrosystems がこの言葉を充てているので、本稿でもそれに従います。シリアル化/デシリアル化、シリアライズ/デシリアライズという言葉で読み替えた方が分かりやすいかもしれません。
直列化できるオブジェクトは、 java.io.Serializable
インタフェースを実装するクラスか、それを継承したサブクラスから作られたものです。このインタフェースを実装したクラスから作られたオブジェクトは、 ObjectInputStream
/ObjectOutputStream
によって入出力可能です。
こうして作られた直列化可能オブジェクトの入出力では、このオブジェクトが保持している他のオブジェクトへの参照を自動的辿って、関連するオブジェクトが全て入出力されます。
オブジェクトを直列化するときに、直列化しないフィールドを宣言しておくこともできます。また、直列化プロセスを明示的に制御することも可能です。この場合は、 Serializable
インタフェースを継承した java.io.Externalizable
インタフェースを実装します。
オブジェクトを直列化/復元することで、オブジェクトをファイルに保存して持続的 (persistent) に利用したり、ネットワーキングでソケットストリームを用いてリモートホスト間でやりとりすることが出来ます。