Java のインターフェイスと抽象クラスのシリアル化と逆シリアル化

WBOY
リリース: 2024-05-02 08:33:01
オリジナル
450 人が閲覧しました

インターフェイスは直接シリアル化できません。ただし、抽象クラスは、非静的、非一時的なフィールドを含まない場合、または writeObject() および readObject() メソッドをオーバーライドしない場合に限り、シリアル化できます。インターフェイスを使用するか、 writeObject() ) メソッドと readObject() メソッドをオーバーライドします。

Java 中接口和抽象类的序列化和反序列化

Java におけるインターフェイスと抽象クラスのシリアル化と逆シリアル化

はじめに

Java ではシリアル化はプロセスです保存または送信のためにオブジェクトをバイトのシーケンスに変換すること。逆シリアル化は、バイトのシーケンスをオブジェクトに復元する逆のプロセスです。 Java は、Serializable インターフェイスを実装するオブジェクトに対して組み込みのシリアル化および逆シリアル化のサポートを提供します。ただし、インターフェイスと抽象クラスの場合は状況が異なります。

インターフェイスのシリアル化

インターフェイス自体はオブジェクトではないため、シリアル化できません。インターフェイスのインスタンスをシリアル化および逆シリアル化するには、インターフェイスを実装する具象クラスを作成し、その具象クラスが Serializable インターフェイスを実装していることを確認する必要があります。

// 接口
public interface Shape {
    // ...
}

// 具体类并实现 Serializable 接口
public class Circle implements Shape, Serializable {
    // ...
}
ログイン後にコピー

抽象クラスのシリアル化

抽象クラスは、非静的、非一時的なフィールドを含まない限り、シリアル化できます。抽象クラスに非静的、非一時的なフィールドが含まれる場合、writeObject() メソッドと readObject() メソッドが明示的に実装されない限り、そのクラスをシリアル化することはできません。

// 抽象类实现 Serializable 接口
public abstract class Animal implements Serializable {
    // ...

    // 覆盖 writeObject() 方法
    private void writeObject(ObjectOutputStream out) throws IOException {
        // ...
    }

    // 覆盖 readObject() 方法
    private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
        // ...
    }
}
ログイン後にコピー

実用的なケース

シリアル化

ObjectOutputStream クラスを使用してオブジェクトをシリアル化できます。バイトシーケンスに変換します。

// 创建 ObjectOutputStream 对象
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("data.ser"));

// 序列化对象
out.writeObject(circle);
ログイン後にコピー

逆シリアル化

ObjectInputStream クラスを使用して、バイト シーケンスをオブジェクトに逆シリアル化します。

// 创建 ObjectInputStream 对象
ObjectInputStream in = new ObjectInputStream(new FileInputStream("data.ser"));

// 反序列化对象
Circle circle = (Circle) in.readObject();
ログイン後にコピー

このようにして、インターフェイスと抽象クラスのインスタンスをシリアル化および逆シリアル化できます。シリアル化と逆シリアル化を確実に成功させるには、Java シリアル化ルールに従う必要があることに注意してください。

以上がJava のインターフェイスと抽象クラスのシリアル化と逆シリアル化の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート