0

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

不幸的是,我不小心在我的游戏中添加了一个新功能:一个名为Large. 我忘了SerializableLarge. 然后,我将一个对象添加到我花费大量时间处理Large的现有文件中。Game当我保存Game文件时,NotSerializableException发生了异常。

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

  • Serializable在我的Large课堂上实施
  • 使' large'变量transient

您还有其他解决方案吗?

4

1 回答 1

-1

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

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

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

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

于 2013-02-11T00:34:01.613 回答