シリアル化は、オブジェクトをディスクまたはデータベースに永続化できるバイトシーケンスに変換するプロセスです。 の逆過程をオブジェクトからのバイトシーケンスは直列化復元.
クラスは、オブジェクトを正常に直列化するために、java.io
パッケージに存在する直列化可能なインターフェイスを実装する必要があります。, 直列化可能であるマーカーインタフェースを追加する直列化可能でない行動の実装するクラスです。
Javaは、java.io
java.io.serializable
java.io.Externalizable
ObjectInputStream
- オブジェクトをシリアル化および逆シリアル化するためのパッケージ
java.io.serializable
ObjectInputStream
ObjectOutputStream
javaマーカーインターフェイス
マーカーインターフェイスは、フィールドとメソッドを持たないjavaの特別なインターフェイスです。, マーカーインタフェースでお知らせコンパイラの実装するクラスで特別な行動に意味があります。 一部の例マーカーインタフェース、
java.io.serializable
java.lang.Cloneable
java.rmi.Remote
java.util.RandomAccess
すべてのこれらのインタフェースのない方法。 だけで追加の特別行動の授業を実施します。 しかしマーカータのインターフェースして推奨されていませんからJava5、置き換えられたアンソロジー。, アノテーションは、以前のマーカーインターフェイスとまったく同じ役割を果たすマーカーインター
シリアル化と逆シリアル化を実装するために、JavaはObjectOutputStreamとObjectInputStreamの二つのクラスを提供します。
ObjectOutputStreamクラス
オブジェクトの状態をファイルに書き込むために使用されます。 Java.io.Serializableインタフェースを実装するオブジェク シリアル化を実行するさまざまな方法を提供します。
ObjectInputStreamクラス
ObjectInputStreamは、ObjectOutputStreamを使用して書き込まれたオブジェクトとプリミティブデータを逆シリアル化します。,
writeObject()およびreadObject()メソッド
writeObject()
ObjectOutputStream
クラスのメソッドは、オブジェクトをシリアル化し、出力ストリームに送信します。
public final void writeObject(object x) throws IOException
readObject()
ObjectInputStream
クラスのメソッドは、ストリームからオブジェクトを参照し、それを逆シリアル化します。
public final Object readObject() throws IOException,ClassNotFoundException
シリアライズ中にフィールドをオブジェクト状態の一部にしたくない場合は、必要に応じて静的または一時的に宣言し、javaシリアル化プロセス中には含まれません。,
例:Javaでのオブジェクトのシリアライズ
この例では、オブジェクトをシリアライズするためにSerializableインタフェースを実装するクラスがあります。
Studentinfoクラスのオブジェクトは、writeObject()
メソッドを使用してシリアル化され、student.txt
ファイルに書き込まれます。
例:Javaでのオブジェクトの逆シリアル化
オブジェクトを逆シリアル化するには、指定されたファイルからオブジェクトを読み取るObjectInputStreamクラス 以下の例を参照してください。,
Abhi104null
連絡先フィールドは、静的としてマークされており、以前に説明したように静的フィールドがシリアル化されないため、nullです。
注:静的メンバーは、クラスのオブジェクトではなくクラスに接続されているため、シリアル化されません。
transientキーワード
オブジェクトのシリアル化中に、オブジェクトの特定のデータメンバをシリアル化したくない場合は、それを一時的に言及できます。 transientキ,
class studentinfo implements Serializable { String name; transient int rid; static String contact;}
- データメンバーを作成する
transient
そのシリアル化を防ぐことができます。 - この例では、
rid
は一時的なためシリアル化されず、contact
も静的なためシリアル化されないままになります。