0

我正在寻找一个开源库,它可用于透明地将 java 对象(及其依赖项!)保存到文件或数据库,一种快照。

示例用例:我在一堆对象、玩家、分数、位置等中有游戏的状态。用户单击“保存”,现在我需要保存这些对象(所有要保存的对象都可以注释)到一个文件或数据库。如果系统崩溃或用户稍后登录,我应该能够从这一点恢复。

我正在寻找一个可以尽可能透明和高效地完成它的库。交易等是不必要的。我的优先事项是

  1. 开源,免费,良好的文档
  2. 使用方便。修改某些内容后,用户不必手动保存对象。如果他必须这样做,那应该是微不足道的活动
  3. 稳定的
  4. 应该很容易从快照中读取和恢复。

是否存在涵盖所有 4 个或至少大部分上述 req 的库?我对面向方面的方法持开放态度

我为我的用例问错了 q 吗?它在行业中的做法有很大不同吗?

4

3 回答 3

1

您应该能够使用 java 的内置序列化来解决这个问题。如果您希望它自动保存,请将您的模型包装在一个为您保存它的层中。这甚至可以使用代理(java.lang.reflect.Proxy)“自动”完成。

但是,我通常不建议自动保存状态,因为值通常是相关的。想象一个进度类,它会跟踪您所处的级别以及您在该级别中的距离(例如 0%、25%、50% 和 75%)。

现在,您刚刚完成第 2 级,因此必须将进度更新为“第 3 级,0%”。如果您首先设置级别,进度将(在短时间内)处于“Level 3, 75%”状态,这是不正确的,如果您先设置多远,您将获得“Level 2, 0%”。如果程序在这些点中的任何一个处停止,那么用户将处于不正确的状态。

于 2011-11-24T09:50:23.493 回答
1

您可以使用标准的 java 序列化机制。如果您要保存的所有类都实现标记接口Serializable,您可以透明地保存尽可能大的对象图。它不是数据库,它是文件,但您始终可以将这些对象读回您的应用程序,这可能是您的最佳(或第一个)选项。

这种方法的缺点是数据是二进制的,即您无法使用记事本读取它。并且格式对类中所做的更改非常敏感,因此对向后/向前兼容性的支持是有问题的。

其他可能性是将对象序列化为 XML 或 JSON。对于 XML,请尝试 JAXB 或 XStream。对于 JSON,请看这里

于 2011-11-24T09:44:45.080 回答
0

有一个称为 ObjectInput/ObjectOutput-Stream 的内置功能。

http://docs.oracle.com/javase/6/docs/api/java/io/ObjectInputStream.html

如果你喜欢人类可读的文件,你可能喜欢使用 XStream。

http://x-stream.github.io/faq.html

于 2011-11-24T09:47:02.977 回答