桌面应用程序的对象持久性策略

时间:2008-12-26 16:31:39

标签: java desktop object-persistence

我正在开发一个基于Java的桌面应用程序。应用程序对象模型生成了一些我需要持久化的数据(最好是文件)。还需要保护持久文件,以便其他人无法从数据中获取对象模型详细信息。这样做的最佳策略是什么?我的印象是这些要求在桌面应用程序中非常常见。但是,我还没有找到很多有用的信息。任何建议表示赞赏。

6 个答案:

答案 0 :(得分:2)

如果您不需要修改此文件,则可以将对象图序列化为文件。内容是二进制的,只能使用编写它们的类来读取它们。

您也可以使用Java DB(我认为自1.5以来附带Java)和一个ORM工具,例如Hibernate。

修改

自1.6 http://developers.sun.com/javadb/

以来捆绑了它

答案 1 :(得分:2)

您的问题分为两部分。 1:如何保存数据?第二:如何保护他们?

有很多方法可以保存数据。从简单的XML,java序列化到自己的数据格式。如何通过“纯文本”无法防止逆向工程数据。你可以让它变得更难,但并非不可能。为了使它变得非常不可能,你需要使用强加密,这就出现了问题。如何加密数据并且不显示安全令牌。如果您正在使用您的应用程序分发安全令牌,那么找到它并解决问题只是时间问题。因此,在安装过程中输入安全令牌不是一种选择。如果用户必须进行身份验证才能使用应用程序它应该有帮助,但这是同样的问题。下一个选项是使用自定义保护的双射算法来混淆数据。最后一个选择是不做任何事情只是保持数据格式是私有的,不要发布它们并混淆你的应用程序以防止逆向工程。

最好的价值是使用自定义数据格式和模糊应用程序对数据进行简单的混淆(XOR primenumber)。

答案 2 :(得分:1)

XStream可用于执行简单的xml读取和写入文件。 Xstream允许您获取任何java对象并将其写入并从您的文件中读取。

答案 3 :(得分:0)

答案 4 :(得分:0)

如果你确实需要声明中隐含的安全性(“......保护持久化文件,以便其他人无法从数据中获取对象模型详细信息。”),我会将内存中的数据序列化(至Java序列化表单,XML或其他)然后将该字节流加密到文件。

答案 5 :(得分:0)

您可以尝试使用像Berkeley DB Java Edition(http://www.oracle.com/database/berkeley-db/je/index.html)这样的嵌入式数据库。他们的直接持久层API很可能适合您的需求。数据库内容将同步到磁盘上的文件。从直接查看文件来看,从数​​据中找出对象模型并不容易。我有很好的使用体验,它闪电般快速,适用于桌面应用程序。