2011-05-11 193 views

回答

12

一些類本身不支持序列化,因爲它們代表了管理Java環境的外部資源。例如,FileOutputStream不能真正被序列化,因爲它表示一個打開的文件句柄。 Socket的情況也是如此:您無法保存和恢復「打開的套接字」。

如果要序列化某個具有該類型字段的對象,則必須將這些字段標記爲瞬態。

另一個理由使用transient是當你的類做了某種內在的緩存。如果,例如,你的類可以做計算和性能的原因,緩存每次計算的結果,然後保存該緩存可能是不希望的(因爲重新計算它可能比恢復更快,或者因爲它是不可能的,舊的緩存值任何使用)。在這種情況下,你標記的緩存領域的短暫。

+0

尼斯解釋。我在想,如果我們不設置字段像FileOutputStream中短暫的,將它的序列化/反序列化過程中拋出任何異常? – 2014-12-06 07:57:15

0

如果您不想序列化任何變量/字段將其標記爲瞬態。銀行餘額,信用卡詳細信息等,如果我們序列化,然後有人可以反序列化並使用它。

4

是的,它可以安全相關,但原因也可以是在字段中的數據是從其他領域得到的,而且也沒有理由把它在這種情況下。如果可以,請節省帶寬:)

0

考慮將用戶名和密碼作爲其字段之一的類。也可以考慮在序列化之後在網絡中傳遞這個對象,並在其他地方反序列化它。

在這種scenerios瞬間將有助於