gpt4 book ai didi

java - 保存程序的状态

转载 作者:行者123 更新时间:2023-11-30 07:41:54 25 4
gpt4 key购买 nike

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

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

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

你对此有何看法?你还有其他想法吗?

最佳答案

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

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

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

关于java - 保存程序的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34539944/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com