在Java桌面应用程序中保留数据的最佳方法是什么?

时间:2008-08-31 23:50:25

标签: java persistence desktop oop

我的桌面应用程序中有一个庞大的Java对象树,我正在尝试确定将它们作为文件保存到文件系统的最佳方法。

我曾经有过一些想法:

  • 使用DataOutputStream滚动我自己的序列化程序:这样可以最大程度地控制文件中的内容,但代价是微观管理。

  • 使用ObjectOutputStream及其各种相关类的直接旧序列化:虽然因为我发现数据很脆弱,但我并没有卖掉它。更改任何对象的结构会破坏它的序列化实例。所以我陷入了似乎是一个可怕的版本化噩梦。

  • XML序列化:它并不那么脆弱,但直接序列化的速度要慢得多。它可以在我的程序之外进行转换。

  • JavaDB :我考虑过这一点,因为我很乐意编写JDBC应用程序。这里的区别在于数据库实例仅在打开或保存文件时保持不变。它并不漂亮但是......如果以后需要,它确实可以迁移到中央服务器架构,它引入了以更简单的方式查询数据模型的可能性。

我很想知道其他人的想法。而且我希望我错过了一些比上面更简单,更简单的方法。


以下是从以下答案中剔除的更多选项:

  • 对象数据库 - 具有比ORM方法少得多的基础架构,并且比XML方法执行速度更快。谢谢aku

6 个答案:

答案 0 :(得分:5)

我会选择最终选项JavaDB(Sun的Derby发布版)并使用对象关系层,如HibernateiBatis。使用前三个方法意味着您将花费更多时间来构建数据库引擎,而不是开发应用程序功能。

答案 1 :(得分:4)

将Hibernate看作是一种更简单的数据库接口方式。

答案 2 :(得分:4)

根据我的经验,您最好使用嵌入式数据库。 SQL虽然不够完美,但通常比设计性能良好且可靠的文件格式容易得多。

我没有使用过JavaDB,但我对H2SQLite有好运。 SQLite是一个C库,在部署方面意味着更多的工作。但是,它具有将整个数据库存储在单个跨平台库中的好处。基本上,它是预先打包的通用文件格式。 SQLite非常有用,我甚至开始在脚本中使用它而不是文本文件。

如果你正在处理一个小的持久性问题,请小心使用Hibernate。它增加了很多复杂性和库开销。如果你正在使用大量的表,Hibernate非常好用,但如果你只需要几张表,它可能会很麻烦。

答案 3 :(得分:3)

db4objects可能是最佳选择

答案 4 :(得分:1)

来自codehaus.org的

XStream

XML序列化/反序列化很大程度上没有编码。 您可以使用注释来调整它。 在我工作的两个项目中运作良好。

http://cjugaustralia.org/?p=61

上查看我的用户群演示文稿

答案 5 :(得分:0)

我认为这取决于你需要什么。我们来看看选项:

1)诽谤我!我甚至都不能证明这一点。 :)

2)如果你需要一个简单,快速,单方法的持久性,坚持下去。它将保持完整的数据图原样!要小心你要坚持持久的物体多久。正如你自己指出的那样,版本控制可能是一个问题。

3)比(2)慢,需要额外的代码,并且可以由用户编辑。我只会使用它,数据应该被客户端用另一种语言。

4)如果您需要以任何方式查询数据,请坚持使用数据库解决方案。

好吧,我想你已经回答了你的问题:)