2013-03-27 37 views
-2

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

+0

你使用readObject打开文件吗?或者在文本编辑器中? – 2013-03-27 18:47:32

+0

为什么重要的是你可以看到序列化数据文件中的字符串? – 2013-03-27 18:47:35

+2

您的问题与标题有所不同。回答您的问题标题..答案是可以序列化一个字符串。如果您真的担心字符串的安全性被序列化并保存在文件中,那么更好选择为加密.. – 2013-03-27 18:47:40

回答

1

那么,字符串nit转换成其他类似数字的情况下?

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

虽然通常序列化的数据不容易被人读取,但这不应被视为对希望读取它的人的任何形式的保护。序列化格式有很好的文档记录,任何知道它是Java二进制序列化结果的人都可能从中获得重要的数据。

如果您需要保持数据安全,您需要另一个方案以及作为序列化。 (我也鼓励你研究其他的序列化选项,我并不是Java系列化的忠实粉丝 - 它非常脆弱,在面对代码改变时向前和向后兼容你的数据是有一定难度的)

0

没有限制,序列化的结果需要不可读。当你序列化一个字符串时,字符串需要放在数据中,不妨把它放在那里,以及它的长度。

序列化并不是最简洁的形式,因此在添加到字节流之前,您不应该对字符串没有进行过压缩感到惊讶。

+0

谢谢你的回应。我明白你和别人的意思。如果我编写一个包含字符串的序列化对象,那么单独依靠序列化,它会使字符串数据特别难以阅读将是愚蠢的。 – 2013-03-27 18:59:56