我知道如果类A实现了Externalizable,它应该有no-arg构造函数,但是如果类没有任何构造函数(就像我的A类),java为它提供了空的no构造函数。那我为什么会有错误呢?如果我显式地将no-arg构造函数(public A() {})添加到A类中,一切都会好起来的。
错误:
线程"main“中的java.base/java.io.ObjectStreamClass$ExceptionInfo.newInvalidClassException(ObjectStreamClass.java:159)异常: A;在java.base/java.io.ObjectStreamClass.checkDeserialize(ObjectStreamClass.java:864) at java.base/java.io.ObjectStreamClass.checkDeserialize(ObjectStreamClass.java:864) at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2061) at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1594) at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:430) at 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 {}
}发布于 2021-01-20 15:47:59
Externalizable需要一个public no-args构造函数,但提供的no-arg构造函数具有默认的访问修饰符(也称为包私有),请尝试如下:public class A() {}
https://stackoverflow.com/questions/65812349
复制相似问题