Javaシーケンス化の理解とまとめ


1、Javaシーケンス化とは
Javaプラットフォームでは、メモリに多重化可能なJavaオブジェクトを作成できますが、一般的には、JVMが実行されている場合にのみ、これらのオブジェクトが存在する可能性があります.つまり、これらのオブジェクトのライフサイクルはJVMのライフサイクルよりも長くはありません.しかし、現実的なアプリケーションでは、JVMが停止した後に指定されたオブジェクトを保存し、保存されたオブジェクトを将来再読み込みする必要がある場合があります.Javaオブジェクトのシーケンス化は、この機能を実現するのに役立ちます.Javaオブジェクトのシーケンス化を使用して、オブジェクトを保存するときに、その状態を1組のバイトに保存し、将来的には、これらのバイトをオブジェクトにアセンブリします.オブジェクトのシーケンス化は、オブジェクトの「ステータス」、すなわちそのメンバー変数を保存することに注意してください.このことから,オブジェクトシーケンス化はクラス内の静的変数に注目しないことが分かる.オブジェクトを永続化するときにオブジェクトのシーケンス化が使用されるほか、RMI(リモートメソッド呼び出し)を使用したり、ネットワークでオブジェクトを渡したりするときにオブジェクトのシーケンス化が使用されます.
2、Javaシーケンス化の応用シーン
  • メモリ内のオブジェクトの状態をファイルまたはデータベースに保存したい場合.
  • ネットワーク上でオブジェクトをソケットで転送したい場合.
  • RMIを介してオブジェクトを転送したい場合.

  • 3、コードインスタンス
      public class Box implements Serializable{
    
        private int width;
        private int height;
    
        public Box(int width, int height) {
            this.width = width;
            this.height = height;
        }
    
        public int getWidth() {
            return width;
        }
    
        public void setWidth(int width) {
            this.width = width;
        }
    
        public int getHeight() {
            return height;
        }
    
        public void setHeight(int height) {
            this.height = height;
        }
    
        @Override
        public String toString() {
            return "Child{" +
                    "width=" + width +
                    ", height=" + height +
                    '}';
        }
    }

      public class SerializableTest {
    
        public static void main(String args[]) throws Exception{
    
            File file = new File("box.out");  
    
            FileOutputStream fos = new FileOutputStream(file);
            ObjectOutputStream out = new ObjectOutputStream(fos);
            Box oldBox = new Box(10,20);
            out.writeObject(oldBox);
            out.close();
    
            FileInputStream fis = new FileInputStream(file);
            ObjectInputStream in = new ObjectInputStream(fis);
            Box newBox = (Box)in.readObject();
            in.close();
            System.out.println(newBox.toString());
    
        }
    }

      Child{width=10, height=20}

    4、

    • Serializable
      , Serializable, , , .
      , , Serializable 。
      String, , Enum, Serializable, , NotSerializableException。

    • Java ObjectOutputStream ObjectInputStream
      readObject()|writeObject() ; , readInt()|writeInt(), readDouble()|writeDouble() 。
    • transient
      transient , 。
      transient null , 。
      ( : Serializable, )

    5、

    • ;
    • NotSerializableException ;
    • , , ;
    • , ;
    • , , 。 ( ,
    • Serializable , , , InvalidClassException ;
      , 。 , , ;

    6、

    (1).
    Serialization( ) ; deserialization 。

    ◆ 。
    ◆ 。
    ◆ 。

    (2). ID
    serialVersionUID JAVA 。 ,Java serialVersionUID 。
    ,JVM serialVersionUID serialVersionUID , , , , InvalidCastException。

    (3).
    Java , , , , ;
    , , , , , 。

    (4).
    ,ObjectOutputStream Header 。 ( ) Header , :
    java.io.StreamCorruptedException: invalid type code: ACの (5). シーケンス ◆transientキーワード◆writeObject()メソッドとreadObject()メソッド◆Externalizableインタフェース◆readResolve()メソッドの
    :u 013670933 2015/7/27 14:44:49
    :94コメント:0コメントの