在java中的程序运行之间存储数据的最佳方法?

时间:2009-08-16 19:28:23

标签: java storage information-hiding

在Java中的程序运行之间存储数据的最佳方法是什么?我已经知道你可以使用文本文件并以这种方式存储信息,但我想知道是否有更好的方法来存储程序运行之间由程序生成的信息。

此外,有什么办法可以保证信息的安全吗?具体来说,我想让最终用户无法访问它。

11 个答案:

答案 0 :(得分:6)

  

我想知道是否有任何办法   其他放置信息   由跑步之间的程序生成   该计划?

只需使用ObjectOutputStream将其序列化为文件,然后使用ObjectInputStream将其恢复原状。

  

也有任何方法可以做到这一点   保持信息安全?从   最终用户能够访问它吗?

如果代码在最终用户的系统上运行,那么没有,就没有办法阻止它们获取数据 - 它甚至不值得花时间尝试以某种方式对其进行编码,因为它很容易连接调试器并检查程序的在它运行的状态。作为二进制格式,Java序列化将阻止非技术用户破译它,这几乎是你所希望的最好的。

答案 1 :(得分:5)

我自己从未使用过它,但我认为这就是JDK java.util.prefs.Preferences最初设计的目的。

答案 2 :(得分:2)

您可以使用Properties来存储信息。如果您想使其安全,请通过某种encryption stream

运行它

答案 3 :(得分:1)

文件加密或带密码的本地数据库。

答案 4 :(得分:1)

您可以使用db4o来存储数据。它是一个对象数据库,支持加密。

答案 5 :(得分:1)

您可能对Quick'n'dirty persistence for Java感兴趣。

答案 6 :(得分:1)

有些人建议使用序列化。请注意序列化有许多缺点。

  • 版本控制问题。如果您更改了序列化类中的某些内容,则无法再轻松阅读使用旧版程序编写的序列化文件。
  • 您不知道确切的文件格式。如果你想稍后编写一个不同的程序语言,需要读取文件,那将会非常困难。

序列化不适合长期存储。

我建议使用一个小的嵌入式数据库。 (嵌入式数据库是与程序在同一进程中运行的数据库)。请注意,Sun的Java包含Java DB,它是Apache Derby的一个版本。还有HSQLDB,这是另一个可以用作嵌入式数据库的小而纯的Java数据库。

答案 7 :(得分:0)

开始使用Java时最好的方法是使用ObjectOutputStream或文本文件。一旦您获得了更多经验,就可以使用数据库。

答案 8 :(得分:0)

序列化怎么样?

用户无法阅读,而且相对容易。

答案 9 :(得分:0)

正如其他人所说,有许多方法可以序列化数据。您可以使用像SQLite一样轻量级的东西或只是简单的序列化。只要意识到你为加密数据所做的任何尝试都会被打败,特别是在Java代码的情况下,因为它很容易被逆转。

但是,如果您的大部分用户技术不足以了解逆向工程Java程序的复杂性以找出如何解密数据,那么您应该能够摆脱一些基本的加密方法,如上所述在另一个答案,并做好。只要意识到任何事情都存在于你无法控制的机器上,就没有办法让最持久的用户不知道如何破解它。

我个人建议使用sqlite并对你放在字段中的数据使用一些简单的加密,这样如果有人足够智能以便能够连接到本地数据库文件,他们仍然必须以某种方式反转你的加密算法。 99.9%的普通用户不会为此级别的调查而烦恼。

答案 10 :(得分:0)

作为序列化技术的XML对程序中未来的更改更具弹性,这些更改将调整存储,而不是像对象序列化这样的二进制格式。然而,这将使大多数用户具有可读性和可更改性。

非常简单的压缩/解压缩会阻止几乎所有用户获取数据的实际内容。在当前写入流周围使用GZipInputStream / GZipOutputStream将完成这项工作。你越是狡猾地防范撬动,你就会越多地影响你的软件用户。