2014-03-12 93 views
0

爲什麼只有Serializable標記接口,並且不需要通過合同實現readObject()writeObject()。它會更有意義嗎?爲什麼Serializable接口不需要實現readObject()和writeObject()

+3

這就是它設計的方式。序列化只是一個標記界面。 –

+0

它保持這種方式向後兼容。 –

+0

如果您將其標記爲「Serializable」,則可能會對某些數據造成潛在的安全風險,基本上允許網絡發送和接收此類數據。 –

回答

2

序列化機制能夠在沒有任何readObject()writeObject()方法的情況下序列化對象。但它需要你指定它可以或不可以序列化的對象。一些對象保存數據,這是有意義的序列化。其他一些則沒有。例如,序列化字符串是有意義的,但是序列化Socket或數據庫連接不會。 所以你簡單地通過讓他們的類實現Serializable接口來標記哪些對象可以被序列化。

如果您想要更多地控制對象的狀態被序列化和反序列化的方式,那麼您可以使用這兩種方法。

+0

但是,如果至少需要空方法實現這些方法,而不是冒着程序員在添加'read/writeObject'時忘記私有訪問修飾符或者沒有被編譯器強制執行而失敗的錯誤,在運行時默默地?這背後的動機是不是通過具有相同安全問題的對象api暴露這些方法? –

+1

問題是接口迫使類定義公共方法。他們不能強迫班級去定義私人班級。而這些方法不應該公開。無論如何,如果這些方法很重要,應該使用單元測試。 –

相關問題