【发布时间】:2021-04-24 23:36:28
【问题描述】:
我知道如果类 A 实现 Externalizable 它应该有无参数构造函数,但如果类没有任何构造函数(比如我的 A 类),java 会为它提供空的无参数构造函数。那么为什么我有一个错误呢?如果我将无参数构造函数 (public A() {}) 显式添加到 A 类,一切都会好起来的。
错误:
线程“main”中的异常 java.io.InvalidClassException: A;没有有效的构造函数 在 java.base/java.io.ObjectStreamClass$ExceptionInfo.newInvalidClassException(ObjectStreamClass.java:159) 在 java.base/java.io.ObjectStreamClass.checkDeserialize(ObjectStreamClass.java:864) 在 java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2061) 在 java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1594) 在 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 {}
}
【问题讨论】:
-
在此处阅读所有答案:stackoverflow.com/a/36484886/2055998
标签: java externalizable