2010-02-15 70 views
3

正如我們所知,Serializable是一個標記接口(即沒有任何方法的接口)。序列化對象有什麼不同,因爲它可以被持久化?

所以我想知道如何實現這個接口使得實現類的一個對象被持久化,除了名稱Serializable之外沒有什麼是這個接口。

我們通過實現這個接口還有其他的特性嗎?

我們可以創建一個類似的標記接口,它確實有不同的名稱相同的工作(這個問題只是嘗試。)

編輯:?我可以延長Serializable接口。並且擴展接口也將具有相同的屬性。

回答

4

聽起來很容易,但不是。

此接口僅用於確保開發人員知道,有意識的序列化的後果(僅發送需要的數據線,並避免將它們標記爲transient發送無用信息)

不使用它,如果不需要的話,可能會將大量無用的字節扔到電線上。一個使用序列化的應用程序花費其感知執行時間的大部分時間將數據傳輸到磁盤或通過網絡等。

通過迫使開發人員說「是的,我想這樣做」,希望是至少他們會說一分鐘,然後說(我是否會序列化這些可以稍後計算的大數據)?

這不一定總是發生。

還有沒有任何其他功能,我們通過實現這個接口獲得。

不,就是這樣。

我們可以創建一個類似的標記接口,它確實有不同的名稱相同的工作?(這個問題只是嘗試。)

沒有,這是特殊的一個。你可以嘗試一個自定義的serialization機制,但這是一個不同的故事。

使用序列化時,您還必須瞭解許多其他事情,例如安全性和靈活性。爲此,我建議您閱讀

項目74:明智地實現可序列化Effective Java Book上。

下面是該項目啓動如何:

...因爲這是很容易做的,有一個共同的誤解,系列化要求對程序員的部分舉手之勞。事實遠非如此複雜。雖然使課程可串行化的直接成本可以忽略不計,但長期成本往往很大。

2

Serializable接口,就像你說的,只將類定義爲可序列化。它沒有效果。

根據是否標記爲Serializable,由Java序列化機制來處理對象。 Java架構師可以簡單地定義一個接口,每個實現它的類都是可序列化的。

底線:它只是一個名字

+0

就語言而言,它只是一個名字。就預期用途而言,涉及更多。如果你做錯了,一個序列化的對象可能會被磨鍊,而你在線的另一端讀取的類可能會引入惡意代碼。 – OscarRyz 2010-02-15 18:28:54

1

通過實現Serializable接口,您可以告訴JVM它可以被持久化。它沒有其他含義。順便說一句,這是一個標記接口,而不是一個「標記」接口。

+1

感謝fastcodejava。我會糾正它。 – GuruKulki 2010-02-15 18:25:33

+1

不是JVM - 分離機制。 – 2010-02-15 18:45:33