Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 保存程序的状态_Java_Serialization_Data Structures - Fatal编程技术网

Java 保存程序的状态

Java 保存程序的状态,java,serialization,data-structures,Java,Serialization,Data Structures,我正在用java编写一个游戏。 现在我想添加一个功能来保存这个游戏的整个状态,以便于调试,我想自己编写,不需要任何库。 我想到了一些可能的方法,但不知道是哪一种 我应该选择,所以我希望你能帮我做这个决定 我可以创建一个GameData类,将我需要的所有数据保存在该类的一个对象中,并使用ObjectOutputStream保存它。我对这个解决方案的想法是: 首先,几乎我所有的类都必须实现Serializbale。这是不是有点难看的代码? 此外,这个GameData对象应该通过所有构造函数和对象传递

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

  • 我可以创建一个GameData类,将我需要的所有数据保存在该类的一个对象中,并使用ObjectOutputStream保存它。我对这个解决方案的想法是: 首先,几乎我所有的类都必须实现Serializbale。这是不是有点难看的代码? 此外,这个GameData对象应该通过所有构造函数和对象传递,或者每个数据都应该设置为public,以便将数据保存在那里。 每次我更改游戏时,GameData类和处理它的所有代码都必须更改

  • 我可以通过反射递归遍历所有对象,直到到达基本类型或字符串,并将这些数据保存在树中。。用反省重新构造它。。但是这是可能的还是我忘记了一些问题

  • 你觉得怎么样?
    你还有其他想法吗

    有几个问题需要考虑: 您的对象图可能有循环,您必须以某种方式避免将对象序列化两次。问题是,在重建(加载)过程中,您需要重新指定对象,即使它们尚未加载。要做到这一点,还需要对象标识符。 另一个问题是,您可能有对不是自己编写的类的引用,这些类没有实现
    Serializable
    Externalizable
    。您可能需要用自己的类替换这些类。 另一个问题是考虑如果更改数据模型会发生什么。你将如何阅读旧的保存游戏

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


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

    您所说的“保存整个游戏的状态”是什么意思,就像它是一个冒险游戏,有一个背包还是一个象棋游戏?我想自己写这个,[…]我希望你能帮助我_O@TessellatingHeckler我认为他在寻找一般的实现,而不是真正的完整代码haha@Daemedeor我觉得这不要紧。。我在寻找一般的方法。但在这种情况下,它是一个经过修改的俄罗斯方块版本。@TessellingHeckler是的。。我正在寻找一般的提示