我正在制作一个游戏。游戏设计者创建一个Game
对象,然后将其保存到硬盘;为了玩游戏,用户从硬盘驱动器加载Game
对象。Game
对象是Serializable
。Game
对象包含数千个其他对象(Map
、Person
、Tile
s等),所有这些对象也是Serializable
。
不幸的是,我无意中为我的游戏添加了一个新功能:一个名为Large
的类。我忘了在Large
上实现Serializable
接口。然后,我将一个Large
对象添加到我花了大量时间处理的现有Game
文件中。当我保存我的Game
文件时,发生了NotSerializableException
异常。
我正试图从这个错误中恢复过来,并以可用的形式从硬盘中检索我的Game
文件,这样我就可以继续设计我的游戏,而不必重新创建它。不幸的是,当我尝试加载该文件时,我得到了一个NotSerializableException
。我尝试了以下策略,但没有成功:
- 在我的
Large
类上实现Serializable
- 使"
large
"变量transient
你还有其他解决方案吗?
你确定游戏真的被保存了吗?如果在保存文件时发生异常,我认为它无法序列化对象。
事实上,您面临的问题是将序列化对象用于这类事情的主要缺陷。当您对类进行更改(例如以下某个)时,旧的序列化对象将变得不兼容。
- 删除字段
- 更改对象的超类
- 将非静态字段更改为静态字段(反之亦然)
- 更改字段的类型
你应该使用你自己的数据格式(当你还在的时候)。您可以选择自己选择的数据格式,甚至可以使用XML或JSON(后者由于其更轻而变得越来越流行),并且有API可以快速轻松地保存对象。