保存计划的状态

时间:2015-12-31 01:48:56

标签: java serialization data-structures

我正在用java编写游戏。 现在我想添加一个功能来保存这个游戏的整个状态,用于调试目的,我想自己写这个,没有任何库。 我想到了一些可能的方法,但我不知道哪一个 我应该选择 - 所以我希望你能帮我做出这个决定。

  1. 我可以创建一个GameData - Class,在这个类的Object中保存我需要的所有数据,然后用ObjectOutputStream保存它。我对这个解决方案的看法:                                                                                          首先,我几乎每个班级都必须实现Serializbale。难道这不是一个丑陋的代码吗? 此外,此GameData对象应通过所有构造函数和对象传递,或者每个数据都应设置为public,以将数据保存在那里。 每次我改变游戏时,GameData类和处理它的每一个代码都必须改变。

  2. 我可以递归遍历所有带反射的对象,直到我到达原始类型或字符串,然后将这些数据保存在树中......用反射再次重新构造它......但是......这是可能还是我忘了有些问题吗?

  3. 你怎么看? 你有其他想法吗?

1 个答案:

答案 0 :(得分:1)

有几个问题需要考虑: 你的对象图可能有周期,你不得不避免两次序列化对象。问题是在重建(加载)期间需要重新分配对象,即使它们尚未加载。您还需要对象标识符来执行此操作。 另一个问题是,您可能引用了自己没有编写的类,并且没有实现SerializableExternalizable。您可能必须用自己的类替换它们。 另一个问题是考虑如果更改数据模型会发生什么。你怎么能阅读旧的拯救游戏?

如果你的对象图很小并且没有周期,那么选项2)可能是最好的。 否则我会考虑使用开源数据库。例如,您可以使用带有O / R映射层的关系数据库(基本上使它们看起来像对象数据库)。

我实际上写了一次我自己的解决方案,它是一个名为ZooDB(www.zoodb.org)的实际对象数据库(不需要映射层)。它运行嵌入式,即无需启动数据库服务器进程等。它尚未完成,但应该足以满足您的需求。