【问题标题】:Getting InvalidClassException获取 InvalidClassException
【发布时间】: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


    【解决方案1】:

    From the Javadoc:

    当一个 Externalizable 对象被重构时,一个实例是使用 public no-arg 构造函数创建的

    您没有公共的无参数构造函数,因为该类不是公共的。

    来自JLS 8.8.9 Default Constructor

    默认构造函数与类具有相同的访问修饰符,除非类缺少访问修饰符,在这种情况下,默认构造函数具有包访问权限(第 6.6 节)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-02
      • 2013-01-21
      • 2014-09-18
      • 2012-11-15
      • 2013-05-26
      • 2015-03-20
      • 2017-09-15
      • 2022-11-11
      相关资源
      最近更新 更多