在java中序列化的基本组件是什么?

时间:2013-12-02 20:09:26

标签: java serialization

假设项目A中的以下界面

interface Business extends Serializable{//project A
 void do_work();
}

这里我们在项目B中有一个实现了接口的类

class LocalBusiness implements Business{
 private static final long serialVersionUID = 0xF109BAC00L;
 void do_work(){
  System.out.print("Hi there\n");
 }
}

然后我将在某个州处编组(序列化)LocalBusiness的实例。

我的问题是,我想在项目C中解组它,项目C需要(classpath)实际实现Business接口吗?

2 个答案:

答案 0 :(得分:3)

是的,它应该。运行时类型的类名由默认序列化机制序列化。此类名用于确定反序列化的运行时类型。如果Java找不到具有接收名称的类(和serialVersionUID),它将抛出异常。试试,你会看到。

旁注:您的界面扩展为Serializable。在大多数情况下,这被认为是不好的做法。

答案 1 :(得分:2)

是。 ObjectOutputStream不包含写入其中的对象的任何类字节码。

但是,如果您使用 RMI 来调用另一台计算机上的方法,则可以使用动态类加载,这样一台计算机就可以从另一台计算机加载代码 - 甚至是第三台计算机。