シリアル化は、オブジェクトをディスクまたはデータベースに永続化できるバイトシーケンスに変換するプロセスです。 の逆過程をオブジェクトからのバイトシーケンスは直列化復元.

クラスは、オブジェクトを正常に直列化するために、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も静的なためシリアル化されないままになります。