10

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

我的一些想法是:

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

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

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

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

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


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

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

6 回答 6

5

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

于 2008-09-01T00:00:26.873 回答
4

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

于 2008-08-31T23:54:01.303 回答
4

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

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

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

于 2008-09-01T01:43:47.390 回答
3

db4objects可能是最佳选择

于 2008-09-01T00:18:37.313 回答
1

来自 codehaus.org 的 XStream

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

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

于 2008-09-01T00:00:02.693 回答
0

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

1) 立即删除!我什至不会辩解。:)

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

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

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

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

于 2008-09-02T12:33:48.533 回答