如何从文件反序列化到不同的类

Alo*_*ong 6 java serialization file package deserialization

我将a序列化为一个ArrayList<packageA.Changelog> list文件并将文件传输到另一台机器中的另一个系统.

因为它是一个接收文件的不同系统,所以我没有相同的packageA.Changelog类,而是packageB.Changelog具有完全相同的结构但是在不同的包中.

当我使用时

ArrayList<packageB.Changelog> changelogs = (ArrayList<packageB.Changelog>)ois.readObject();

从我得到的文件中读出来ClassCastException.

如何避免这种异常?我是否需要在其他系统中创建相同的包结构才能接收列表?

Sap*_*Sap 4

是的,您可以做三件事之一。

  1. 使用相同的包名创建相同的类

  2. 创建一个接口(当然还是在两台机器上的同一个包中)并将其发送到客户端机器上。即使在不同的包中,所有类都可以实现此接口。例如,您的接口可以命名为 Loggable,并且它应该具有当前在 ChangeLog 类中声明的所有方法。

  3. 或者最后不使用“ChangeLog”类,而是完全避免使用它并使用默认可序列化的 HashMap。而且您不必将任何东西运送到您的客户端(其他)计算机。您将能够序列化 ArrayList 并将其转换回其他计算机上的对象。

所有实现 Loggable 类的类都可以转换为该类型。我希望这有帮助