-2

现在这是一个我搜索了很多地方的问题,做了很多编码,但仍然很困惑。我是 Java 新手,所以我正在编写这个程序,它将对象数据保存为序列化对象。数据成员是两个字符串。我读到,当一个对象被序列化并存储在一个文件中时,整个对象状态都会被保存。真的。然后数据也是二进制形式,人类或普通文本编辑器无法读取。因此,当我使用 writeObject 存储对象时,它成功保存了数据,但是当我打开文件时,它包含大量乱码数据,字符串分散在其中。如果我再仔细看一点,我可以清楚地辨认出琴弦。那么在数字的情况下,字符串是否被转换成其他东西?

4

2 回答 2

1

那么在数字的情况下,字符串 nit 是否被转换为其他东西?

我相信,这些字符串以长度前缀修改的 UTF-8 序列化。

虽然通常序列化的数据不容易被人类读取,但这不应该被视为对想要阅读它的人的任何形式的保护。序列化格式有据可查,任何知道它是 Java 二进制序列化结果的人都可能能够从中获取重要数据。

如果您需要保持数据安全,则需要另一种方案以及序列化。(我还鼓励您研究其他序列化选项。我不是 Java 序列化的忠实粉丝 - 它非常脆弱。面对代码更改,让您的数据向后和向前兼容有点挑战。)

于 2013-03-27T18:48:08.270 回答
0

没有限制序列化的结果必须是不可读的。当您序列化一个字符串时,该字符串需要放在数据中,不妨把它连同它的长度一起放在那里。

序列化可能不是最紧凑的形式,因此您不应该对字符串在添加到字节流之前没有以某种方式压缩感到惊讶。

于 2013-03-27T18:49:20.780 回答