java - 通过序列化在应用程序之间传输 Java 类

标签 java serialization

我已成功序列化 Ghost:

class Ghost {}

File file = new File("serialized.class.bin");
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));
oos.writeObject(Ghost.class);

然后我尝试在不同应用程序中恢复它:

InputStream is = new FileInputStream(new File("serialized.class.bin"));
ObjectInputStream ois = new ObjectInputStream(is);
Object o = ois.readObject();

并且我收到错误,在(尝试)加载类时丢失了类:

java.lang.ClassNotFoundException: Ghost

反序列化类时我可能无法访问 Ghost.class 文件。是否可以通过这种方式传递Java类?

UPD。我假设在序列化类时正在转储类定义(字节码)。我错了。通过getResourceAsStream()可以达到目标虽然。

最佳答案

序列化一个Class对象只是存储对类名的引用,它实际上并不存储类字节码(嗯,它比实践中稍微复杂一些,但效果是相同的) 。在反序列化时,ObjectInputStream 将尝试从其自己的类加载器中按名称加载类,因此该类需要可以通过该类加载器访问。

关于java - 通过序列化在应用程序之间传输 Java 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13584646/

相关文章:

Java序列化: readFields/putFields vs.序列化映射

java - 使用 Spark 驱动程序中的 Java native readObject 进行反序列化时出现 ClassCastException

c# - 如何在 Windows 10 通用应用程序中使用 xsd.exe 生成的文件

javascript - jQuery 序列化顺序似乎是随机的

java - 通过不同的方法应用类(class)日历

java - 用java解析xml文件并将结果转换为javabean

java - 哪个会使类文件变大?导入 java.awt.*,还是一堆或单个导入语句?

c++ - 在 C++ 中通过 UDP 套接字发送结构、 float 和整数

java - JUnit 测试方法可以有参数吗?

java - 什么是快速、等待通知或忙等待?