在java程序运行之间存储数据的最佳方式是什么?
在Java程序运行之间存储数据的最佳方式是什么?我已经知道你可以使用文本文件并以这种方式存储信息,但我想知道是否有更好的方法来存储程序运行之间生成的信息。在java程序运行之间存储数据的最佳方式是什么?
此外,有没有办法做到这一点,以保持信息的安全?具体而言,我想让最终用户无法访问它。
我想知道是否有任何方式,是通过 运行程序的 之间的程序genereated 其他配售的信息?
只需使用ObjectOutputStream
将其序列化为一个文件,然后使用ObjectInputStream
将其恢复。
也有没有办法做到这一点,如 保持信息的安全?从 最终用户能够访问它?
如果代码最终用户的系统上运行,则没有,有没有办法阻止他们获得的数据 - 它甚至没有值得你花时间试图以某种方式进行编码,因为它很容易附加一个调试器和在程序运行时检查程序的状态。作为一种二进制格式,Java序列化将防止非技术用户破译它,这几乎是你所希望的最好的。
对文件或带密码的本地数据库进行加密。
您可以使用Properties来存储信息。如果你想保证安全,请运行某种encryption stream。
如果您想过度使用它,请将您自己的二进制格式加密并加密。 – Esko 2009-08-16 19:37:51
开始Java时最好使用的是使用ObjectOutputStream或文本文件。一旦你有更多的经验,那么你可以使用数据库。
如何序列化?
它不能被用户阅读并且相对容易。
正如其他人所说,有很多方法来序列化数据。你可以使用像SQLite这样的轻量级或简单的序列化。只要认识到你对数据进行加密的任何尝试都可能被破坏,特别是在Java代码的情况下,因为它可以很容易地颠倒过来。然而,如果你的大部分用户不够技术,无法理解Java程序的逆向工程的复杂性以找出如何解密你的数据,那么你应该能够避免使用一些基本的加密方法,比如什么是在另一个答案中提到并且很好。只要意识到任何时候任何东西驻留在你不能控制的机器上,就没有办法让最持久的用户不知道如何破解它。
我个人建议使用sqlite,并在字段中使用一些简单的加密数据,这样如果有人足够聪明,能够连接到本地数据库文件,他们仍然必须在一些反向你的加密算法方式。 99.9%的普通用户不会为这个级别的调查而烦恼。
XML作为一种序列化技术,对将来的程序更改具有更强的适应性,可以调整存储量而不是二进制格式,如对象序列化。但是,这会使大多数用户非常容易阅读和更改。
一个非常简单的压缩/解压缩将阻止几乎所有的用户获取数据的实际内容。围绕您当前的写入流使用GZipInputStream/GZipOutputStream将完成这项工作。您的防窥越精细,您越会影响软件的用户。
当然,没有任何事情阻止他从序列化到压缩和/或加密主题的流。它永远不会牢不可破,但可能非常接近牢不可破。如果它是值得的?可能不是在大多数情况下。 – Fredrik 2009-08-16 21:07:16
不可以。如果加密流的应用程序正在最终用户的机器上运行,那么任何类型的加密都是绝对浪费时间,因为正如我写的那样,在调试模式下运行它非常容易,并且可以在抢先数据之前它被加密(除了应用程序必须包含加密密钥)。 – 2009-08-16 21:16:42