Java のネイティブシリアライズ方式

Javaの内部クラスのシリアル化方法は通常のクラスのシリアル化方法と大きくは異ならない。Javaのシリアル化メカニズムによって、オブジェクトはバイトストリームに変換でき、そのバイトストリームはファイルに書き込んだり、必要に応じてオブジェクトを再作成できるようにネットワーク経由で送信したりできる。

内部クラスをシリアライズできるようにするには、その内部クラスと外部クラスの両方がシリアライズ可能である必要があります。以下に、内部クラスを格納する方法を示します。

  1. ネストしたクラスがシリアライズ可能なインターフェースを実装する:ネストしたクラスを定義するときは、ネストしたクラスがシリアライズ可能なインターフェースを実装していることを確認します(例:
public class OuterClass implements Serializable {
private class InnerClass implements Serializable {
// 内部类的实现
}
}
  1. static内部クラスはSerializableインターフェースを実装します。内部クラスがstaticの場合、外部クラスのインスタンスは不要で直列化できます。static内部クラスはSerializableインターフェースを直接実装できます。
public class OuterClass implements Serializable {
private static class InnerClass implements Serializable {
// 内部类的实现
}
}
  1. シリアライズが可能な外部クラスのwriteObject、readObjectメソッドを利用する:内部クラスがシリアライズ可能なインタフェースを実装していなくても、外部クラス内でwriteObject、readObjectメソッドを定義して、内部クラスのシリアライズ、デシリアライズの処理を行えます。例えば、次のようにします。
public class OuterClass implements Serializable {
private class InnerClass {
// 内部类的实现
}
private void writeObject(ObjectOutputStream out) throws IOException {
out.defaultWriteObject();
out.writeObject(innerClass);
}
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
in.defaultReadObject();
innerClass = (InnerClass) in.readObject();
}
}

この方法は、内部クラスのシリアライズとデシリアライズに使用できます。なお、デシリアライズの処理においては、内部クラスと外部クラスのオブジェクトが正しくデシリアライズされていることが、内部クラスが正しく再構築されるために必要です。

bannerAds