2017-07-20 57 views
1

有很多關於枚舉和序列化的toturial,我也在sun閱讀文章,但是無法找到如何序列化它。爲什麼枚舉在java中的序列化是不同的

枚舉常量的序列化與普通的可序列化或可外部化的對象不同。枚舉常量的序列化形式僅由其名稱組成;常量的字段值不存在於表單中。要序列化枚舉常量,ObjectOutputStream將寫入由枚舉常量的名稱方法返回的值。爲了反序列化一個枚舉常量,ObjectInputStream從流中讀取常量名稱;然後通過調用java.lang.Enum.valueOf方法獲得反序列化的常量,並將常量的枚舉類型與接收的常量名稱一起作爲參數傳遞。

任何例子都會明白。

+0

你的問題到底是什麼?你可以序列化一個枚舉沒有任何補充,你有什麼試過,它不工作? – EsotericVoid

+0

@像上面的說法,「Enum常量是不同的序列化」是什麼意思。 b/w正常序列化然後枚舉有什麼區別。 – shiv

+0

這裏我們去,所以你的實際問題是「如何在Java中枚舉序列化?」。你可以在https://stackoverflow.com/a/15522276/6768966找到答案。 「我也在陽光下閱讀文章,但無法找到如何序列化它。」部分是誤導性的,看起來你不知道如何,而不是爲什麼。 – EsotericVoid

回答

2

所有枚舉類型都隱含地擴展了java.lang.Enum,它已經實現了Serializable。因此,您沒有采取具體行動,它已經爲您完成了。

+0

那麼爲什麼有關於枚舉和序列化的嗡嗡聲,正如我提到的問題。 – shiv

+0

由於實現是以非常有效的方式完成的 - 人們可能會試圖編寫自己的序列化幷包含不必要的內容。由於無論如何您都需要接收端的類,除了枚舉常量之外,不需要包含任何內容。 (您可以進一步將其優化爲序號,但是插入項目的類的不同版本可能存在問題...) – corsiKa