加载序列化类

时间:2011-08-24 00:17:24

标签: java class serialization classloader

加载使用标准Java Serialization API序列化的类的最简单方法是什么?

.class格式与Class<?>实例的序列化形式之间是否有任何微不足道的关系?

3 个答案:

答案 0 :(得分:1)

如果您询问是否可以序列化Class<?>对象,然后将该序列化文件用作.class文件加载到ClassLoader中,则答案为否。

对象序列化意味着您将对象状态保存为字节序列。这与字节码不同。

答案 1 :(得分:1)

  

.class格式和.class格式之间是否有任何微不足道的关系   Class实例的序列化形式?

编译时的Serializable类获取一个名为serialVersionUID(SUID)的标识符。使用此版本的类序列化的每个对象也都标有此SUID。

  

加载已使用序列化的类的最简单方法是什么   标准的Java Serialization API?

取决于您要实现的目标,* .class文件,如您所知,由一系列字节中的字节代码组成。对象不复制字节代码,因此您无法从序列化对象恢复其类的字节序列。但是您将serialVersionUID作为序列化对象中的最终长变量。使用此信息,您可以匹配* .class的相应版本。

但这说起来有所作为,在实际实现这种“自适应”加载时,你会遇到许多有趣的东西。

答案 2 :(得分:0)

您需要做什么才能读取类文件并转换为byte []并将它们写入文件。

然后在deserlalizing时,你需要从文件加载byte []并默认定义类系统类加载器或自定义类加载器取决于你的需要。