将java对象树保存到db或文件的开源库

将java对象树保存到db或文件的开源库,java,serialization,nosql,object-oriented-database,Java,Serialization,Nosql,Object Oriented Database,我正在寻找一个开源库,它可以用来透明地将java对象(及其依赖项!)保存到文件或数据库(一种快照)中 示例用例:我有一堆对象、玩家、分数、位置等游戏状态。用户单击“保存”,现在我需要将这些对象(所有要保存的对象都可以注释)保存到文件或数据库中。如果系统崩溃或用户登录以后,我应该能够从这一点上恢复 我正在寻找一个图书馆,可以做到尽可能透明和高效。交易等是不必要的。 我的优先事项是 开源,免费,好的文档 易用性。用户应该 不必在修改某些内容后手动保存对象。属于 如果他必须这样做,那应该是琐碎的活动

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

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

我正在寻找一个图书馆,可以做到尽可能透明和高效。交易等是不必要的。 我的优先事项是

  • 开源,免费,好的文档
  • 易用性。用户应该 不必在修改某些内容后手动保存对象。属于 如果他必须这样做,那应该是琐碎的活动
  • 马厩
  • 应该 易于从快照读取和恢复
  • 是否存在涵盖所有4个或至少大部分以上需求的库?我对面向方面的方法持开放态度


    我的用例问错q了吗?它在业界的实现方式有很大不同吗?

    您可以使用标准的java序列化机制。如果要保存的所有类都实现标记接口
    Serializable
    ,则可以透明地保存任意大的对象图。它不是DB,而是文件,但您可以随时将这些对象读回应用程序,这可能是您的最佳(或第一)选择

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


    另一种可能是将对象序列化为XML或JSON。对于XML,请尝试JAXB或XStream。请看一下JSON。

    有一个名为ObjectInput/ObjectOutput Stream的内置功能

    如果您希望有人类可读的文件,您可能希望使用XStream


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

    但是,我通常不建议自动保存状态,因为值通常是相关的。想象一个进步课程,它跟踪你所处的水平以及你在该水平内的进步程度(比如0%、25%、50%和75%)


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

    在java游戏服务器中是这样做的吗?序列化对象图,保存它(手动)。重新加载它。状态是以某种方式序列化的,通过某种内置机制或其他逻辑(为了稳定性,我认为后者更常见)。你说的“手动”保存是什么意思?它不一定是用户按下保存按钮,它可能是您的程序每x分钟保存一次状态或在游戏中执行特定任务。为什么需要重新加载它?(我可以理解边保存边加载,如果您想进入较旧的状态,则加载它,但保存并立即重新加载?)我不想立即重新加载它。我所说的手动,实际上是指程序员必须在每次更新POJO后手动编写保存部分的代码。而不是由aop或类似的解决方案透明地处理。但正如您所说,这可能会导致状态不一致,这是一个坏主意。JSon似乎是一个不错的选择。我是否可以将这种图形保存到nosql数据库中,比如说mongodb,然后快速读取它。这是一个好方法吗?