有哪些轻量级的选项可以用来持久化Java对象?
我正在寻找最简单的解决方案。我不需要任何花哨的功能,只需要一些适用于比较简单的对象(例如集合、关系和简单继承),并且不会给现有代码库带来太多明显的复杂性。
我知道的选项包括Hibernate和EMF等框架,但它们听起来太复杂,而且耗时。我希望有一个开箱即用的东西,最好是面向文件而不是面向数据库,我可以将其放在我的普通Java对象之上。
这是一个新手问题,感谢提前提供类似教程般的、澄清上下文的指导。
有哪些轻量级的选项可以用来持久化Java对象?
我正在寻找最简单的解决方案。我不需要任何花哨的功能,只需要一些适用于比较简单的对象(例如集合、关系和简单继承),并且不会给现有代码库带来太多明显的复杂性。
我知道的选项包括Hibernate和EMF等框架,但它们听起来太复杂,而且耗时。我希望有一个开箱即用的东西,最好是面向文件而不是面向数据库,我可以将其放在我的普通Java对象之上。
这是一个新手问题,感谢提前提供类似教程般的、澄清上下文的指导。
db4o 是一种对象数据库,因此无需设置模式,并且能够很好地适应对象结构随时间变化的情况。
http://java.sun.com/javase/6/docs/api/javax/xml/bind/JAXBContext.html
基本上您使用以下内容:
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的外观并对更复杂的对象进行建模。
ObjectOutputStream和ObjectInputStream可以实现这个功能。它们是Java内置的,可以很容易地序列化/反序列化对象。
这些工具的不好之处在于,如果你更改了对象,就无法导入现有的旧对象。你需要想办法与可能已保存在用户计算机上的现有对象保持兼容,例如为你的类添加版本号,并创建将旧对象转换为新对象的能力。
更多信息请参见此处:
编辑: 您也可以考虑立即将以下属性添加到所有类中。这可能允许您向类添加属性,仍然能够加载旧的Object文件。在RMI领域中,这是有效的,但我不确定文件是否也适用。不要删除属性。
static final long serialVersionUID = 1L;
Serializer serializer = new Persister();
MyObject object = serializer.read(MyObject.class, new File("file.xml));
同时编写也同样简单
serializer.write(myInstance, new File("file.xml"));
这是一种非常轻量级的方法,除了标准Java 1.5之外没有任何依赖项。与其他对象到XML技术(如JAXB、XStream、Castor)相比,这些技术依赖于许多其他项目,Simple XML非常轻巧且内存效率高。
一个简单的方法是将你的对象串行化 (Serializable) 到磁盘上。
我必须说,Hibernate 的初始学习曲线相对较浅。你应该能够在不到一天的时间内建立一个测试系统。只有当你想要更高级的功能时,它才开始变得更加陡峭。我强烈建议你一定要看看,毕竟如果最终不选择它,那么一天又算什么呢?
话虽如此,如果你只是想要快速而简单的东西,你考虑过直接将对象序列化到磁盘上吗?