Java 保存程序的状态
我正在用java编写一个游戏。 现在我想添加一个功能来保存这个游戏的整个状态,以便于调试,我想自己编写,不需要任何库。 我想到了一些可能的方法,但不知道是哪一种 我应该选择,所以我希望你能帮我做这个决定Java 保存程序的状态,java,serialization,data-structures,Java,Serialization,Data Structures,我正在用java编写一个游戏。 现在我想添加一个功能来保存这个游戏的整个状态,以便于调试,我想自己编写,不需要任何库。 我想到了一些可能的方法,但不知道是哪一种 我应该选择,所以我希望你能帮我做这个决定 我可以创建一个GameData类,将我需要的所有数据保存在该类的一个对象中,并使用ObjectOutputStream保存它。我对这个解决方案的想法是: 首先,几乎我所有的类都必须实现Serializbale。这是不是有点难看的代码? 此外,这个GameData对象应该通过所有构造函数和对象传递
你还有其他想法吗 有几个问题需要考虑: 您的对象图可能有循环,您必须以某种方式避免将对象序列化两次。问题是,在重建(加载)过程中,您需要重新指定对象,即使它们尚未加载。要做到这一点,还需要对象标识符。 另一个问题是,您可能有对不是自己编写的类的引用,这些类没有实现
Serializable
或Externalizable
。您可能需要用自己的类替换这些类。
另一个问题是考虑如果更改数据模型会发生什么。你将如何阅读旧的保存游戏
如果对象图很小并且没有循环,那么选项2)可能是最好的。
否则我会考虑使用开源数据库。例如,您可以使用带有O/R映射层的关系数据库(本质上使它们看起来像对象数据库)
实际上,我曾经编写过自己的解决方案,它是一个名为ZooDB(www.ZooDB.org)的实际对象数据库(不需要映射层)。它运行嵌入式,即无需启动数据库服务器进程等。它还没有完全完成,但应该足以满足您的要求。您所说的“保存整个游戏的状态”是什么意思,就像它是一个冒险游戏,有一个背包还是一个象棋游戏?我想自己写这个,[…]我希望你能帮助我_O@TessellatingHeckler我认为他在寻找一般的实现,而不是真正的完整代码haha@Daemedeor我觉得这不要紧。。我在寻找一般的方法。但在这种情况下,它是一个经过修改的俄罗斯方块版本。@TessellingHeckler是的。。我正在寻找一般的提示