我已成功序列化类 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/