【发布时间】:2020-01-29 13:52:47
【问题描述】:
import java.io.*;
public class StaticVariableTest {
public static void main(String[] args) throws IOException, ClassNotFoundException {
AC AC = new AC();
AC.b = 25;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(AC);
oos.flush();
oos.close();
bos.close();
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bis);
AC na = (AC) ois.readObject();
System.out.println(na.b);
}
}
class AC implements Externalizable {
private static final long serialVersionUID = 1L;
int b = 20;
@Override
public void writeExternal(ObjectOutput objectOutput) throws IOException {
}
@Override
public void readExternal(ObjectInput objectInput) throws IOException, ClassNotFoundException {
}
}
为什么在上面的程序中我得到 InvalidClassException?
线程“主”java.io.InvalidClassException 中的异常: 序列化Examples.AC;没有有效的构造函数 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) 在 serializationExamples.StaticVariableTest.main(StaticVariableTest.java:18)
它说没有有效的构造函数,但 java 应该为 A 类提供一个默认的无参数构造函数。
【问题讨论】:
标签: java exception serialization deserialization