我已经成功序列化了class 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() http://docs.oracle.com/javase/6/docs/api/java/lang/ClassLoader.html#getSystemResourceAsStream%28java.lang.String%29虽然。
序列化一个Class
object 只是存储对类名的引用,它实际上并不存储类字节码(嗯,它比实践中稍微复杂一些,但效果是相同的)。在反序列化时ObjectInputStream
将尝试从其自己的类加载器中按名称加载类,因此该类需要已经可以通过该类加载器访问。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)