我不小心序列化了一个包含非可序列化字段的对象;现在我需要把它拿回来

时间:2013-02-11 00:28:10

标签: java serialization deserialization

我正在制作游戏。游戏设计师创建一个Game对象,然后将其保存到硬盘驱动器中;为了玩游戏,用户从硬盘驱动器加载Game对象。 Game对象为SerializableGame对象包含数千个其他对象(MapPersonTile等),所有这些对象都是Serializable

不幸的是,我不小心为我的游戏添加了一个新功能:一个名为Large的课程。我忘记在Serializable上实施Large界面了。然后我将Large对象添加到我花了相当长时间工作的现有Game文件中。保存Game文件后,发生了NotSerializableException异常。

我正在尝试从此错误中恢复并以可用的形式从硬盘驱动器中检索我的Game文件,以便我可以继续设计我的游戏,而无需再次创建它。不幸的是,当我尝试加载文件时,我得到NotSerializableException。我尝试了以下策略,没有成功:

  • Serializable课程
  • 上实施Large
  • 制作“large”变量transient

您还有其他解决方案吗?

1 个答案:

答案 0 :(得分:-1)

你确定游戏真的被保存了吗?如果在保存文件时发生异常,我认为它无法将对象序列化。

您遇到的问题实际上是使用序列化对象进行这类事情的主要缺陷。当你对类进行更改时,例如以下之一,旧的序列化对象变得不兼容。

  1. 删除字段
  2. 更改对象的超类
  3. 将非静态字段更改为静态(反之亦然)
  4. 更改字段类型。
  5. 您应该使用自己的数据格式(在您还在的时候)。您可以选择您选择的数据格式,甚至使用XML或JSON(后者现在变得越来越流行,因为它更轻量级)并且有可用的API来快速轻松地保存对象。