关于持久性:将数据持久保存在Java桌面应用程序中的最佳方法是什么?

关于持久性:将数据持久保存在Java桌面应用程序中的最佳方法是什么?

What's the best way to persist data in a Java Desktop Application?

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

我曾经有过一些想法:

  • 使用DataOutputStream滚动我自己的序列化器:这将使我对文件中的内容有最大的控制权,但要以微管理它为代价。

  • 使用ObjectOutputStream及其各种相关类进行的直接序列化:尽管我发现数据很脆弱,但我没有将其出售。更改任何对象的结构都会破坏它的序列化实例。因此,我陷入了可怕的版本恶梦中。

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

  • JavaDB:我考虑过这一点,因为我很喜欢编写JDBC应用程序。此处的区别在于,数据库实例仅在打开或保存文件时才会保留。它不是很漂亮,但是...的确可以在以后出现需求时迁移到中央服务器体系结构,它引入了以更简单的方式查询数据模型的可能性。

我很好奇看到别人的想法。我希望我能错过一些比上述方法更简单明了的方法。

以下是从答案中得出的一些其他选择:

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

我将使用您的最终选择JavaDB(Sun的Derby发行版),并使用对象关系层,例如Hibernate或iBatis。使用前三个方法意味着与开发应用程序功能相比,您将花费更多的时间来构建数据库引擎。


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

我没有使用JavaDB,但是我对H2和SQLite感到很幸运。 SQLite是一个C库,在部署方面意味着更多工作。但是,这样做的好处是可以将整个数据库存储在一个跨平台的库中。基本上,它是一种预打包的通用文件格式。 SQLite非常有用,以至于我什至开始使用它而不是脚本中的文本文件。

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


看看Hibernate是连接数据库的一种简单方法。


db4objects可能是最佳选择


来自codehaus.org的XStream

XML序列化/反序列化在很大程度上无需编码。
您可以使用注释对其进行调整。
在我工作的两个项目中表现良好。

在http://cjugaustralia.org/?p=61上查看我的用户组演示文稿。


我认为这取决于您的需求。让我们看一下这些选项:

1)立即描述!我什至没有理由。 :)

2)如果您需要简单,快速,一种方法的持久性,请坚持下去。它将按原样保留完整的数据图!注意要保留持久对象的时间。正如您自己指出的那样,版本控制可能是个问题。

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

4)如果仍然需要查询数据,请坚持使用数据库解决方案。

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


推荐阅读

    回到桌面linux命令?

    回到桌面linux命令?,密码,电脑,系统,位置,环境,底部,终端,桌面,状态,信息,lin

    linux换桌面背景命令?

    linux换桌面背景命令?,环境,软件,工具,时间,基础,系统,数据,管理,图片,公共,G

    linux切换桌面的命令?

    linux切换桌面的命令?,密码,系统,电脑,位置,终端,设备,信息,情况,状态,桌面,

    linux桌面版命令行?

    linux桌面版命令行?,系统,密码,流程,工具,终端,首页,电脑,地方,命令,界面,切

    linux命令桌面叫啥?

    linux命令桌面叫啥?,系统,软件,环境,密码,工具,终端,传播,管理,首页,标准,lin

    linux系统桌面命令?

    linux系统桌面命令?,密码,系统,电脑,环境,终端,信息,工具,位置,桌面,界面,请

    linux进入桌面命令行?

    linux进入桌面命令行?,密码,电脑,系统,终端,位置,状态,信息,底部,字符,桌面,L

    linux用命令重启桌面?

    linux用命令重启桌面?,标准,工作,设备,系统,电脑,盘中,位置,情况,密码,命令,

    linux命令进桌面文件?

    linux命令进桌面文件?,系统,密码,位置,信息,终端,状态,管理,环境,情况,命令,l

    linux刷新桌面命令?

    linux刷新桌面命令?,电脑,软件,系统,位置,质量,实时,时间,平均,数字,资金,为

    linux显示桌面的命令?

    linux显示桌面的命令?,密码,系统,电脑,位置,环境,桌面,官网,设备,底部,管理,l

    linux命令如何到桌面?

    linux命令如何到桌面?,密码,电脑,环境,位置,系统,底部,设备,终端,桌面,页面,l

    linux命令改桌面壁纸?

    linux命令改桌面壁纸?,图片,电脑,照片,位置,信息,手机,环境,壁纸,界面,单击,

    linux桌面命令代码?

    linux桌面命令代码?,电脑,系统,密码,环境,代码,基础,地址,服务,网上,通讯,lin

    linux启动桌面的命令?

    linux启动桌面的命令?,密码,系统,电脑,位置,设备,环境,包装,情况,官网,桌面,

    linux下载桌面命令?

    linux下载桌面命令?,电脑,系统,密码,环境,工具,软件,设备,发行,数据,包装,Lin

    linux命令行装桌面?

    linux命令行装桌面?,环境,系统,网上,名称,密码,发行,地址,桌面,终端,界面,lin

    linux桌面复制命令?

    linux桌面复制命令?,系统,电脑,文件,命令,基本知识,目录,源文件,文件夹,目

    linux命令和应用程序?

    linux命令和应用程序?,软件,系统,环境,管理,基础,情况,位置,电脑,工具,中心,

    linux从桌面进命令行?

    linux从桌面进命令行?,系统,电脑,密码,情况,位置,首页,终端,界面,桌面,图形