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



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

不幸的是,我无意中为我的游戏添加了一个新功能:一个名为Large的类。我忘了在Large上实现Serializable接口。然后,我将一个Large对象添加到我花了大量时间处理的现有Game文件中。当我保存我的Game文件时,发生了NotSerializableException异常。

我正试图从这个错误中恢复过来,并以可用的形式从硬盘中检索我的Game文件,这样我就可以继续设计我的游戏,而不必重新创建它。不幸的是,当我尝试加载该文件时,我得到了一个NotSerializableException。我尝试了以下策略,但没有成功:

  • 在我的Large类上实现Serializable
  • 使"large"变量transient

你还有其他解决方案吗?

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

事实上,您面临的问题是将序列化对象用于这类事情的主要缺陷。当您对类进行更改(例如以下某个)时,旧的序列化对象将变得不兼容。

  1. 删除字段
  2. 更改对象的超类
  3. 将非静态字段更改为静态字段(反之亦然)
  4. 更改字段的类型

你应该使用你自己的数据格式(当你还在的时候)。您可以选择自己选择的数据格式,甚至可以使用XML或JSON(后者由于其更轻而变得越来越流行),并且有API可以快速轻松地保存对象。

最新更新