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

我的一些想法是:

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

  • 使用 ObjectOutputStream 及其各种相关类的直接旧序列化: :但我并不相信它,因为我发现数据很脆弱。更改任何对象的结构都会破坏它的序列化实例。所以我陷入了一场可怕的版本控制噩梦。

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

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

我很好奇其他人的想法。我希望我错过了一些比上述方法更明显、更简单的方法。


以下是从以下答案中挑选出的更多选项:

  • 对象数据库 - 基础设施比 ORM 方法少得多,并且比 XML 方法执行速度更快。谢谢阿库
有帮助吗?

解决方案

db4对象 可能是最好的选择

其他提示

我会选择你的最后一个选择 JavaDB(Sun 的发行版 德比)并使用对象关系层,例如 休眠 或者 巴蒂斯. 。使用前三种方法意味着您将花费更多的时间来构建数据库引擎而不是开发应用程序功能。

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

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

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

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

来自 codehaus.org 的 XStream

XML 序列化/反序列化基本上无需编码。您可以使用注释来调整它。在我工作的两个项目中工作得很好。

请参阅我的用户组演示: http://cjugaustralia.org/?p=61

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

1)立即丢弃!我什至不会辩解。:)

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top