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

我将ArrayList list序列化为一个文件,并将该文件传输到另一台机器中的另一个系统。

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

当我使用时

ArrayList changelogs = (ArrayList)ois.readObject();

从文件中读出我得到了ClassCastException

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

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

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

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

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

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

我没有相同的packageA.Changelog类,而是一个packageB.Changelog ,它具有完全相同的结构但在不同的包中。

为什么? 是问题所在。 不要那样做。