インターフェイスは直接シリアル化できません。ただし、抽象クラスは、非静的、非一時的なフィールドを含まない場合、または writeObject() および readObject() メソッドをオーバーライドしない場合に限り、シリアル化できます。インターフェイスを使用するか、 writeObject() ) メソッドと readObject() メソッドをオーバーライドします。
はじめに
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 サイトの他の関連記事を参照してください。