*オブジェクトのシーケンス化

3080 ワード

1.オブジェクトのシーケンス化の意義と実現2.オブジェクトの入力、出力ストリームの使用を理解する3.transicntキーワードを理解する
1.オブジェクトのシーケンス化
オブジェクトシーケンス化とは、スタックメモリに格納されたオブジェクトデータをバイナリデータストリームに変換して転送する動作を指す.ただし、すべてのクラスのオブジェクトがシーケンス化できるわけではありません.シーケンス化されるオブジェクトの場合、そのクラスはjava.io.Serializableインタフェースを実装する必要があります.しかし、このインタフェースには、能力を表す識別インタフェースであるため、操作方法は存在しません.
Javaには2つの識別インタフェースがあります.1つはClonableで、オブジェクトのクローン化に使用され、1つはSerializableインタフェースで、オブジェクトのシーケンス化に使用されます.
例:オブジェクトをシーケンス化できるクラスを定義します.

@SuppressWarnings("serial")
class Book implements Serializable{//         
//         
    private String title;
    private double price;
    public Book(String title,double price){
        this.price=price;
        this.title=title;
    }
    @Override
    public String toString() {
        return "book=="+this.title+"price=="+this.title;
    }
}

このクラスのオブジェクトはオブジェクトのシーケンス化を実現します.
シーケンス化と逆シーケンス化の実現
スタンドアロンプログラムのみが存在するため、オブジェクトをファイルにシーケンス化し、ファイルを介してプログラムに逆シーケンス化します.
シーケンス化クラス:java.io.ObjectOutputStream(オブジェクトを指定した形式のバイナリクラスに変更)
逆シーケンス化クラス:java.io.ObjectInputStream(シーケンス化されたオブジェクトをオブジェクトコンテンツに変換できる)の構築方法は、すべて装飾設計モードです.
例:シーケンス化されたオブジェクト操作の実装

    public static void main(String[] args) throws Exception{
        ser();
    }

    public static void ser() throws Exception{//     
        ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(new File("E:"+File.separator+"my.txt")))
        oos.writeObject(new Book("Java  ",79.8));
        oos.close();
    }

逆シーケンス化:

@SuppressWarnings("serial")
class Book implements Serializable{//         
//         
    private String title;
    private double price;
    public Book(String title,double price){
        this.price=price;
        this.title=title;
    }
    @Override
    public String toString() {
        return "book=="+this.title+"price=="+this.title;
    }
}

public class TestDemo{
    
    public static void main(String[] args) throws Exception{
        dser();
    }

    public static void ser() throws Exception{//     
        ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(new File("E:"+File.separator+"my.ser")))
        oos.writeObject(new Book("Java  ",79.8));
        oos.close();
    }

    public static void dser() throws Exception{
        ObjectInputStream ois=new ObjectInputStream(new FileInputStream("E:"+File.separator+"my.ser"));
        Object obj=ois.readObject();
        Book book=(Book)obj;
        ois.close();
    }

}


今後の実際の開発では,コンテナによってユーザが自動的に以上の操作を完了するのを支援する.
Transientキーワード
以上、オブジェクトのシーケンス化を実現しましたが、シーケンス化時にオブジェクト全体のすべての属性コンテンツが保存されることがわかります.現在、一部の属性のコンテンツが保存される必要がない場合は、transientキーワードで保存できます.private transient String title;
titleプロパティはシーケンス化できません.しかし、ほとんどの場合、このキーワードを使用する必要はありません.
まとめ
オブジェクトシーケンス化自体は非常に単純な概念であるが,開発に広く用いられているため,現在ではコード作成においてSerializableインタフェースの役割が明確である必要があり,すべてのクラスがシーケンス化される必要があるかどうか,伝送が必要なオブジェクトだけがシーケンス化操作を使用する必要があるかどうかに注意が必要である.