2013-03-27 67 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