如何从文件反序列化到不同的类
我将ArrayList list
序列化为一个文件,并将该文件传输到另一台机器中的另一个系统。
由于它是一个接收文件的不同系统,我没有相同的packageA.Changelog
类,而是一个packageB.Changelog
,它具有完全相同的结构但在不同的包中。
当我使用时
ArrayList changelogs = (ArrayList)ois.readObject();
从文件中读出我得到了ClassCastException
。
如何避免这种exception? 我是否需要在其他系统中创建相同的包结构才能接收列表?
是的,你可以做的三件事之一。
-
使用相同的包名创建相同的类
-
创建一个接口(当然在两台机器上的同一个包中)并将其发送到客户端机器上。 即使在不同的包中,您的所有类都可以实现此接口。 例如,您的接口可以命名为Loggable,它应该具有声明的所有方法,这些方法现在都在ChangeLog类中。
-
或者最后不是使用“ChangeLog”类,而是完全避免使用它并使用HashMap代替默认情况下可序列化的HashMap。 而且您不必向您的客户(其他)机器运送任何东西。 您将能够序列化ArrayList并将其转换回其他计算机上的对象。
然后,实现类Loggable的所有类都可以转换为该类型。 我希望这有帮助
我没有相同的
packageA.Changelog
类,而是一个packageB.Changelog
,它具有完全相同的结构但在不同的包中。
为什么? 这是问题所在。 不要那样做。