2012-05-24 56 views
4

我看了一下,但似乎沒有什麼可以完全涵蓋我想要做的事情。運行時是否可以保存Class<?>實例對象?如果是的話,我會怎麼做呢?是否可以保存Java類<?>文件?

+0

請注意,因此序列化和外部化不保存實例對象。它們旨在保存足夠的信息,以便能夠在同一個或另一個JVM中的字段中使用相同的值構建新對象。值得注意的是,這不包括字節碼。如果您也需要這些,請查看RMI。 –

回答

3

你有沒有通過串行化概念使用java。 this link將幫助你解決你的問題。

總之Java.lang.Serializable是你的朋友這樣做。

2

這是一組關於Java序列化的評論,而不是一個答案。在其他答案中只有一些信息(尚未)。

序列化不僅保存一個對象,而且直接和間接地保存它引用的所有對象。這可能非常酷,但是你可能會寫一個小對象,並發現你已經意外創建了一個10MB的文件。

如果在寫入的對象中存在不可序列化的對象的引用,但是間接引用,則寫入操作將拋出異常。

如果您使用套接字,請定期重置ObjectOutput流。否則,每次除第一次寫入對象外,發送的所有內容都是對原始數據的引用。發送具有1,2,3,4和5連續值的相同對象,並且讀取的對象將具有1,1,1,1和1的值。此外,如果沒有重置,內存使用量將會飆升,因爲ObjectOutput而ObjectInput將保留幾乎所有在內存中發送的內容。 (雖然它只會保留每個不同對象的一個​​副本)。

如果類在寫入和讀取之間發生變化,則序列化不起作用。然而,使用Externalization的聰明工作可以解決這個問題。 (並且記住serialVersionUID,如果你的IDE會讓你忘記。)

外化讓你編寫代碼來序列化一個類。這可能非常有用。您可以輸入版本號並檢查它們,並且可以省略比不需要的數據或在讀取期間可以重新創建的數據。不過,它需要比自動序列化更多的工作。

在進行外部化讀取時,請注意所有引用可能引用數據尚未到達的對象;例如,您無法持續總結子對象列表中的金額。可能需要在readObject之後調用一個方法來設置需要計算的值。 (發送冗餘信息通常比重新計算它要好。)

我學會了所有這些難題。

相關問題