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

use*_*371 5 java serialization classname deserialization

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

我必须序列化和反序列化的是两个 ContO 类数组、Plane 类数组、Trackers 和 Medium 类数组,这没问题。

为了扩展此功能,我决定在单独的应用程序中重建它,以便它支持所述游戏的 2 个版本。我计划执行此操作的方法是使用名为 Medium、ContO、Plane 和 Trackers 的抽象类,并且扩展这些类的类将被命名为 MediumVersion1 和 MediumVersion2、ContOVersion1 等。

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

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

bhs*_*cer 5

我刚刚尝试过这个,答案是你不能更改类名。当您尝试将从 ObjectInputStream.readObject() 返回的对象转换为具有不同名称的新类时,最终会出现 ClassCastException。即使您在两个类上保留相同的serialVersionUID,情况也是如此。