我的桌面应用程序中有一个庞大的Java对象树,我正在尝试确定将它们作为文件保存到文件系统的最佳方法。
我曾经有过一些想法:
使用DataOutputStream滚动我自己的序列化程序:这样可以最大程度地控制文件中的内容,但代价是微观管理。
使用ObjectOutputStream及其各种相关类的直接旧序列化:虽然因为我发现数据很脆弱,但我并没有卖掉它。更改任何对象的结构会破坏它的序列化实例。所以我陷入了似乎是一个可怕的版本化噩梦。
XML序列化:它并不那么脆弱,但直接序列化的速度要慢得多。它可以在我的程序之外进行转换。
JavaDB :我考虑过这一点,因为我很乐意编写JDBC应用程序。这里的区别在于数据库实例仅在打开或保存文件时保持不变。它并不漂亮但是......如果以后需要,它确实可以迁移到中央服务器架构,它引入了以更简单的方式查询数据模型的可能性。
我很想知道其他人的想法。而且我希望我错过了一些比上面更简单,更简单的方法。
以下是从以下答案中剔除的更多选项:
答案 0 :(得分:5)
答案 1 :(得分:4)
将Hibernate看作是一种更简单的数据库接口方式。
答案 2 :(得分:4)
根据我的经验,您最好使用嵌入式数据库。 SQL虽然不够完美,但通常比设计性能良好且可靠的文件格式容易得多。
我没有使用过JavaDB,但我对H2和SQLite有好运。 SQLite是一个C库,在部署方面意味着更多的工作。但是,它具有将整个数据库存储在单个跨平台库中的好处。基本上,它是预先打包的通用文件格式。 SQLite非常有用,我甚至开始在脚本中使用它而不是文本文件。
如果你正在处理一个小的持久性问题,请小心使用Hibernate。它增加了很多复杂性和库开销。如果你正在使用大量的表,Hibernate非常好用,但如果你只需要几张表,它可能会很麻烦。
答案 3 :(得分:3)
db4objects可能是最佳选择
答案 4 :(得分:1)
XStream
XML序列化/反序列化很大程度上没有编码。 您可以使用注释来调整它。 在我工作的两个项目中运作良好。
上查看我的用户群演示文稿答案 5 :(得分:0)
我认为这取决于你需要什么。我们来看看选项:
1)诽谤我!我甚至都不能证明这一点。 :)
2)如果你需要一个简单,快速,单方法的持久性,坚持下去。它将保持完整的数据图原样!要小心你要坚持持久的物体多久。正如你自己指出的那样,版本控制可能是一个问题。
3)比(2)慢,需要额外的代码,并且可以由用户编辑。我只会使用它,数据应该被客户端用另一种语言。
4)如果您需要以任何方式查询数据,请坚持使用数据库解决方案。
好吧,我想你已经回答了你的问题:)