更改类名会影响Java反序列化吗?

更改类名会影响Java反序列化吗?,java,serialization,deserialization,classname,Java,Serialization,Deserialization,Classname,我正在做一个修改和一个单独的应用程序,允许重播被保存为特定的游戏 我必须序列化和反序列化的是2个数组的类ContO、数组的类平面、跟踪器和类媒体,这没有问题 为了扩展此功能,我决定在单独的应用程序中重新构建它,以便它支持上述游戏的两个版本。我计划这样做的方式是使用名为media、ContO、Plane和Trackers的抽象类,扩展这些抽象类的类将命名为MediumVersion1和MediumVersion2、ContOVersion1等 在原始游戏文件中,两个版本的类都被命名为ContO、P

我正在做一个修改和一个单独的应用程序,允许重播被保存为特定的游戏

我必须序列化和反序列化的是2个数组的类ContO、数组的类平面、跟踪器和类媒体,这没有问题

为了扩展此功能,我决定在单独的应用程序中重新构建它,以便它支持上述游戏的两个版本。我计划这样做的方式是使用名为media、ContO、Plane和Trackers的抽象类,扩展这些抽象类的类将命名为MediumVersion1和MediumVersion2、ContOVersion1等

在原始游戏文件中,两个版本的类都被命名为ContO、Plane、Trackers和Medium,我想知道的是:通过更改类的名称来反映将被反序列化的文件的版本,它会影响反序列化过程吗


例如,我在原始游戏文件中将该类序列化为ContO的名称,但在名为ContOVersion1的新类名下对其进行反序列化,但包含完全相同的变量。

我刚刚尝试了这一点,答案是您无法更改类名。当您尝试将从ObjectInputStream.readObject()返回的对象强制转换为具有不同名称的新类时,您将得到ClassCastException。即使在两个类上保持相同的serialVersionUID,情况也是如此。

您绝对不能这样做


原始类和包名称与数据一起编码,传入对象被构造为该类,因此,为了避免类强制转换异常,您强制转换它的内容必须相同,类的许多其他方面也必须相同,但不是所有方面。有关更多信息,请参阅对象序列化规范的对象版本控制章节。

我相信是这样。当您尝试它时发生了什么?您打算怎么做?是的,当我看到ObjectOutputStream.writeObject()的java文档时,我也意识到这是不可能的,因为名称确实写在serialization processLink中,用于将我指向对象序列化规范的东西?java对象序列化规范。谷歌5秒。