一千萬個為什麽

搜索

誰實際上實現可序列化的方法?

我一直在學習如何使用 Serializable

我知道如果我使用實現 Serializable 的不同變量創建一個類'A',並向我的類添加 Serializable ,它也是 Serializable

但是,究竟是誰在實施這兩種方法來序列化? 是否 Object 負責處理所有事情或者在必要時重載它們?

最佳答案

序列化實際上是在 java.io.ObjectOutputStream (和java.io.ObjectInputStream)及其一些helper類中實現的。在很多情況下,這種內置的支持已經足夠了,開發人員只需要實現標記接口 Serializable 。這個接口被稱為“標記”,因為它沒有聲明任何方法,因此在實現類上不需要任何特殊的API。

程序員可以根據需要添加或替換默認的序列化機制。例如,如果反序列化一個對象後需要進行一些額外的初始化,則可以使用以下簽名添加方法:

private void readObject(java.io.ObjectInputStream s)
               throws java.io.IOException, java.lang.ClassNotFoundException

要完全控制序列化和反序列化,請實現 java.io.Externalizable ,而不是 Serializable

如果需要,Java序列化中還有許多其他擴展點。 序列化規範是一個權威且完整的源代碼了解所有這些。

轉載註明原文: 誰實際上實現可序列化的方法?