2

クラスが Externalizable を実装する場合、引数のないコンストラクターが必要であることはわかっていAますが、クラスにコンストラクターがない場合 (私のAクラスのように)、java は空の引数なしのコンストラクターを提供します。では、なぜエラーが発生するのでしょうか。クラスに引数なしのコンストラクター ( public A() {})を明示的に追加すると、Aすべて問題ありません。
エラー:

スレッド「メイン」での例外 java.io.InvalidClassException: A; java.base/java.io.ObjectStreamClass$ExceptionInfo.newInvalidClassException(ObjectStreamClass.java:159) に有効なコンストラクターがありません。 java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1594) の io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2061) java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:430) のTest.main (Test.java:19) で

import java.io.*;

public class Test implements Serializable
{
    public static void main(String[] args) throws IOException, ClassNotFoundException
    {

        // initiaizing
        A a1 = new A();

        // serializing
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(baos);
        oos.writeObject(a1);
        oos.close();

        // deserializing
        ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray()));
        A a2 = (A) ois.readObject();
    }
}

class A implements Externalizable
{
    @Override
    public void writeExternal(ObjectOutput objectOutput) throws IOException {}

    @Override
    public void readExternal(ObjectInput objectInput) throws IOException, ClassNotFoundException {}
}
4

1 に答える 1