Javaシーケンス化可能なインタフェースSerializableの概要


Javaシーケンス化可能なインタフェースSerializableの使い方のまとめ
関連概念:
*Serializableインタフェースは、Javaのシーケンス化メカニズムを起動し、オブジェクトと配列を自動的に格納するプロセスを自動的に完了する方法がないタグ付きインタフェースです.
*Javaは、オブジェクトのシーケンス化(Object serialization)と呼ばれ、ObjectOutputStreamで実現される内在的なメカニズムでオブジェクトの書き込みを完了するプロセスを提供します.
*これに対して、オブジェクトを読み込むプロセスは、ObjectInputStreamクラスで実装されたオブジェクト逆シーケンス化(Object deserialization)と呼ばれます.
*多くのJava APIのクラスは、ツールクラスJava.util.DateやすべてのSwing GUIコンポーネントなどのSerializableインタフェースを実現しています.
*Serializableインタフェースをサポートしないオブジェクトを格納しようとすると、NotSerializableException例外が発生します.
*シーケンス可能なオブジェクトを格納すると、クラス名、クラスの署名、オブジェクトインスタンス変数の値、および初期オブジェクトから参照された他のオブジェクトの閉パッケージを含むオブジェクトのクラスが符号化されますが、オブジェクトの静的変数の値は格納されません.
使用方法:
一、まず、シーケンス化とは何かを理解します.シリアル化とは、シーケンス化を実現するエンティティクラスをよく見ます.オブジェクトの状態を保存して、それを読み出すことを目的としています.シーケンス化とは、オブジェクトの状態(各属性量)保存して、適切なタイミングで取得します.シーケンス化はデータをバイトストリームに分解してファイルに保存したり、ネットワーク上で転送したりします.逆シーケンス化とは、バイトストリームを開いてオブジェクトを再構築することです.オブジェクトシーケンス化は、基本データ型をバイト表示に変換するだけでなく、データをリカバリする場合もあります.リカバリデータには、リカバリデータのあるオブジェクトインスタンスJavaが必要です比較的良いオブジェクトの状態を保存するメカニズムです.それはシーケンス化です.つまり、状態を保存し、状態を読み取ることjavaが手伝ってくれて、対応する方法を調整するだけでいいのです.
二、シーケンス化にはどのような特徴がありますか.あるクラスがシーケンス化できる場合、そのサブクラスもシーケンス化できます.staticとtransientタイプと宣言されたメンバーデータはシーケンス化できません.staticはクラスの状態を表し、transientはオブジェクトの一時データを表します.
三、どのような場合にインスタンス化が必要か 1、メモリ内のオブジェクトの状態を1つのファイルまたはデータベースに保存したい場合. 2、ソケットでネット上で相手を伝えたいとき. JAvaオブジェクトのシーケンス化は、1つのオブジェクトのデータを保持するだけでなく、オブジェクトが参照する各オブジェクトのデータを再帰的に保存します.オブジェクト階層全体をバイトストリームに書き込むことができ、ファイルに保存したり、ネットワーク接続に渡したりすることができます.オブジェクトシーケンス化により、オブジェクトの「深いコピー」を行うことができます.つまり、オブジェクト自体と参照されたオブジェクト自体をコピーします.オブジェクトをシーケンス化すると、オブジェクトシーケンス全体が得られます. 3、RMIでオブジェクトを転送したいとき; RMIは、ローカルマシン上でオブジェクトを実行するときのように、オブジェクトをシーケンス化してリモートホスト上のサービスを実行します.
四、どのように実現するか
例:5つの要素からなる配列と3つの文字列からなる配列を格納し、コンソールに読み込む:writeObjectメソッド格納ファイル、readObjectメソッド復元.
import java.io.*;

public class TestObjectStreamForArray {
  public static void main(String[] args)
      throws ClassNotFoundException, IOException {
    int[] numbers = {1, 2, 3, 4, 5};
    String[] strings = {"John", "Jim", "Jake"};

    // Create an output stream for file array.dat
    ObjectOutputStream output =
      new ObjectOutputStream(new FileOutputStream
        ("array.dat", true));

    // Write arrays to the object output stream
    output.writeObject(numbers);
    output.writeObject(strings);

    // Close the stream
    output.close();

    // Create an input stream for file array.dat
    ObjectInputStream input =
      new ObjectInputStream(new FileInputStream("array.dat"));

    int[] newNumbers = (int[])(input.readObject());
    String[] newStrings = (String[])(input.readObject());

    // Display arrays
    for (int i = 0; i < newNumbers.length; i++)
      System.out.print(newNumbers[i] + " ");
    System.out.println();

    for (int i = 0; i < newStrings.length; i++)
      System.out.print(newStrings[i] + " ");
  }
}