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

All*_*nde 10 java oop desktop persistence

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

我的一些想法是:

  • 使用DataOutputStream滚动我自己的序列化程序:这将使我能够最大程度地控制文件中的内容,但代价是对其进行微观管理.

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

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

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

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


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

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

Pau*_*lin 5

看一下 Hibernate,它是一种更简单的数据库接口方式。


Bri*_*ews 5

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


Jay*_*mel 5

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

我没有使用过 JavaDB,但我很幸运地使用了H2SQLite。SQLite 是一个 C 库,这意味着部署方面需要做更多的工作。但是,它的优点是将整个数据库存储在单个跨平台库中。基本上,它是一种预打包的通用文件格式。SQLite 非常有用,我什至开始使用它来代替脚本中的文本文件。

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


aku*_*aku 3

db4objects可能是最好的选择