要持久化Java对象,有哪些轻量级选项

要持久化Java对象,有哪些轻量级选项,java,persistence,Java,Persistence,要持久化Java对象,有哪些轻量级选项 我在寻找最简单的解决办法。我不想要任何花哨的特性,只需要一些简单的东西,可以处理合理简单的对象(一些集合、关系和简单继承),并且不会给现有的代码库带来太多明显的复杂性(如果有的话) 我所知道的选项包括Hibernate和EMF等框架,但它们听起来(并且已经经历过)过于复杂和耗时。我想要一些开箱即用的东西,最好是面向文件的,而不是面向数据库的,我可以把它放在我的普通旧java对象之上 这是一个新手问题,提前感谢您提供的任何教程,如上下文澄清指导。Object

要持久化Java对象,有哪些轻量级选项

我在寻找最简单的解决办法。我不想要任何花哨的特性,只需要一些简单的东西,可以处理合理简单的对象(一些集合、关系和简单继承),并且不会给现有的代码库带来太多明显的复杂性(如果有的话)

我所知道的选项包括Hibernate和EMF等框架,但它们听起来(并且已经经历过)过于复杂和耗时。我想要一些开箱即用的东西,最好是面向文件的,而不是面向数据库的,我可以把它放在我的普通旧java对象之上


这是一个新手问题,提前感谢您提供的任何教程,如上下文澄清指导。

ObjectOutputStream和ObjectInputStream可以做到这一点。它内置于Java中,允许您非常轻松地序列化/反序列化对象

这些方法的缺点是,如果更改对象,则无法导入现有的旧对象。您必须考虑一种与可能已保存在用户计算机上的现有对象保持兼容的方法,例如向类添加版本号,并创建将旧对象转换为新对象的功能

更多信息请点击此处:

编辑: 您还可以考虑将以下属性添加到所有的类中。这可能允许您向类添加属性,并且仍然能够加载旧的对象文件。在RMI的土地,这是可行的,但我不确定的文件。但永远不要删除属性

static final long serialVersionUID = 1L;

是一个对象数据库,因此没有架构设置,它可以很好地适应对象结构随时间的变化。

一种简单的方法是将对象序列化(如可序列化)到磁盘


我不得不说,Hibernate的初始学习曲线相对较浅。您应该能够在不到一天的时间内启动并运行一个测试系统。只有当你想要更高级的功能时,它才会变得更陡峭。我建议你一定要看一看,我的意思是如果你最终没有选择它,那一天算什么


话虽如此,您是否考虑过,如果您只是想要一些快速脏的东西,就直接将对象序列化到磁盘上?

请看这个类似的问题。据我所知,最轻量级的框架是

尝试简单的XML持久化。它非常简单,不需要配置。只需对现有POJO进行注释,然后就可以将它们读写到文件中。支持循环对象图以及所有Java集合。它可以这样使用

Serializer serializer = new Persister();
MyObject object = serializer.read(MyObject.class, new File("file.xml));
写作也同样容易

serializer.write(myInstance, new File("file.xml"));

这是一种非常轻量级的方法,除了标准Java1.5之外没有其他依赖性。与其他依赖于大量其他项目的对象到XML技术(如JAXB、XStream、Castor)相比,简单XML非常轻量级且内存效率高。

如果您正在查看一些简单的东西,您可能还希望数据的格式为您可以读取的格式(而不是二进制文件或数据库)。如果是这样的话,您应该看看JAXB(Java的XML绑定),它是Java6和更高版本的一部分。还有其他技术可以更好地做到这一点,比如XMLBeans,但这是内置的

从Java的API看一下这一页。序列化和反序列化Java对象非常简单

基本上,您可以使用以下内容:

    JAXBContext jc = JAXBContext.newInstance( "com.acme.foo" );

    // unmarshal from foo.xml
    Unmarshaller u = jc.createUnmarshaller();
    FooObject fooObj = (FooObject)u.unmarshal( new File( "foo.xml" ) );

    // marshal to System.out
    Marshaller m = jc.createMarshaller();
    m.marshal( fooObj, System.out );

只需确保FooObject具有@XmlRootElement注释。Java bean属性是自动解释的,但您可以使用其他注释来控制XML的外观和对更复杂的对象建模。

我所知道的最简单的选择是使用任何Java对象生成XML文件。

您可以尝试使用开源库。它所做的只是将POJO转换为XML,然后将其保存到磁盘。它非常易于使用,只需要几行代码即可使用。

我在生产代码中广泛使用了它,它很好地满足了我的需求。

我真的很喜欢db4o,它既漂亮又简单。不幸的是,db4o已经死了,Hibernate有很多东西,但轻量级不是其中之一。至于开箱即用的持久性,您甚至需要在启动之前创建一个数据库模式。除了Hibernate为您做这件事,您甚至不需要考虑它。如果你想的话,Hibernate可以是轻量级的,你能为应用程序速度做的最糟糕的事情就是不去想Hibernate做了什么……我没有看到任何人建议其他方面做得很好。我不知道,你看过Xstream了吗。它稍微简单一点。序列化的唯一问题是,如果您更改对象集,它会完全失败。如果您将serialVersionUID添加到类中,您至少可以添加属性。您仍然无法删除属性。使用java附带的serialver工具来找出类当前拥有的serialVersionUID。