更改类名会影响Java反序列化吗?
我正在做一个修改和一个单独的应用程序,允许重播被保存为特定的游戏 我必须序列化和反序列化的是2个数组的类ContO、数组的类平面、跟踪器和类媒体,这没有问题 为了扩展此功能,我决定在单独的应用程序中重新构建它,以便它支持上述游戏的两个版本。我计划这样做的方式是使用名为media、ContO、Plane和Trackers的抽象类,扩展这些抽象类的类将命名为MediumVersion1和MediumVersion2、ContOVersion1等 在原始游戏文件中,两个版本的类都被命名为ContO、Plane、Trackers和Medium,我想知道的是:通过更改类的名称来反映将被反序列化的文件的版本,它会影响反序列化过程吗更改类名会影响Java反序列化吗?,java,serialization,deserialization,classname,Java,Serialization,Deserialization,Classname,我正在做一个修改和一个单独的应用程序,允许重播被保存为特定的游戏 我必须序列化和反序列化的是2个数组的类ContO、数组的类平面、跟踪器和类媒体,这没有问题 为了扩展此功能,我决定在单独的应用程序中重新构建它,以便它支持上述游戏的两个版本。我计划这样做的方式是使用名为media、ContO、Plane和Trackers的抽象类,扩展这些抽象类的类将命名为MediumVersion1和MediumVersion2、ContOVersion1等 在原始游戏文件中,两个版本的类都被命名为ContO、P
例如,我在原始游戏文件中将该类序列化为ContO的名称,但在名为ContOVersion1的新类名下对其进行反序列化,但包含完全相同的变量。我刚刚尝试了这一点,答案是您无法更改类名。当您尝试将从ObjectInputStream.readObject()返回的对象强制转换为具有不同名称的新类时,您将得到ClassCastException。即使在两个类上保持相同的serialVersionUID,情况也是如此。您绝对不能这样做
原始类和包名称与数据一起编码,传入对象被构造为该类,因此,为了避免类强制转换异常,您强制转换它的内容必须相同,类的许多其他方面也必须相同,但不是所有方面。有关更多信息,请参阅对象序列化规范的对象版本控制章节。我相信是这样。当您尝试它时发生了什么?您打算怎么做?是的,当我看到ObjectOutputStream.writeObject()的java文档时,我也意识到这是不可能的,因为名称确实写在serialization processLink中,用于将我指向对象序列化规范的东西?java对象序列化规范。谷歌5秒。