2010-10-30 62 views
3

如果我想讓我的應用中的所有對象都可序列化,爲什麼不能避免這種情況呢?爲什麼需要使用標記接口來序列化對象?

更新:我知道有些類不能序列像線程但Java系統知道還該線程不是序列化的,爲什麼沒有自動管理呢?

我想知道,如果有一些根本性的原因。

+0

我已經編輯了某人的幫助較小回答的反應。請記住,有些程序員有很大的自我意識,所以忽略它們。它最好是降低或標誌爲冒犯並繼續前進。 – Juliet 2010-11-01 14:13:38

回答

3

爲什麼不能避免這種情況,如果我想我的應用程序中的所有對象都是可序列化的?

簡單,因爲這是方式Java序列化工作。

考慮,這沒有任何意義連載所有的對象。

  • Thread實例和大多數Stream類的實例包括無法序列化的臨界狀態。
  • 某些類依賴於類靜態,並且它們不是序列化的。
  • 有些類是不可序列化的,因爲它們嚴重依賴於不可序列化的類。
  • 一些你不想或不需要序列化的類。

因此,如果應用程序員應該如何控制序列化?他如何阻止各種不必要的東西被偶然序列化?答:通過聲明他想要序列化的類作爲實現Serializable

+0

是的,但java系統知道線程是不可序列化的,爲什麼不自動管理它? – user310291 2010-10-30 11:46:02

+0

我怎麼會偶然序列化,因爲我必須將方法寫入我想要序列化的對象?我的意思是我必須兩次做這個工作,這不符合KISS原則? – user310291 2010-10-30 11:47:12

+0

1)實際上,它沒有。或者更確切地說,它只知道這個,因爲Thread沒有實現Serializable。 2)如果在某些情況下忘記了對象A可能包含對對象B的引用。 – 2010-10-30 11:48:07

1

如果您自己實現所有與序列化相關的代碼,則不需要它,但只要使用標準庫函數執行操作,就必須通過某種方式進行通信,即說明您的類已設計好並可以序列化。僅僅因爲程序中的所有類都是可序列化的,並不意味着它們在其他程序中。

-1

因爲這是語言設計的方式?像這樣的問題從根本上說是毫無意義的。如果所有的類都是可序列化的,那將是可能的,而且確實更容易一些,但是並不是那樣做的。有很多原因,爲什麼沒有,並且他們在一些常見問題解答或高斯林採訪中被提供,我在12年前閱讀過。安全當然是其中之一。但在這個階段,這真的是徒勞的討論。

+0

並且這樣的回答也沒有意義。這種語言可能是以這種方式設計的,只是因爲團隊沒有時間來整合這個版本或者基本原因。 – user310291 2010-10-31 10:48:25

+0

看來其他人想知道所以不要把你的意見理所當然。 – user310291 2010-10-31 10:53:45

+0

但是沒有時間。這只是你的意見。爲什麼需要更多時間做更少的工作?這是一個深思熟慮的設計決定,它被記錄在案。某處。但事實就是如此,就是這樣。不只是'我的意見'。 – EJP 2010-11-01 00:45:35

相關問題