2012-10-02 21 views
3

如果一個類已經加載了一個自定義的類加載器,那麼當然,默認情況下調用結果對象的「getClassLoader()」方法將返回自定義的ClassLoader。是默認的類加載器標識可序列化的

我的查詢是如果相同的對象被序列化,通過網絡發送然後反序列化會發生什麼;在Deserialised類上調用「getClassLoader()」還是會返回自定義ClassLoader?

回答

2

我的查詢是如果相同的對象被序列化,通過網絡發送然後反序列化會發生什麼;在Deserialised類上調用「getClassLoader()」還是會返回自定義ClassLoader?

類加載器未被序列化。 getClassLoader()將爲您提供ObjectInputStream正在使用的類加載器。


ObjectInputStream.resolveClass

ObjectInputStream中此方法的默認實現返回調用

Class.forName(desc.getName(), false, loader) 

其中裝載機被確定爲如下的結果:如果在當前線程的堆棧上的方法其聲明類是由用戶定義的類加載器定義的(並且不是爲了實現反射調用而生成的),則加載器是與當前正在執行的幀最接近的此類方法相對應的類加載器;否則,加載程序爲空

+0

感謝您的快速反應,併爲我澄清。 –

1

。你把一個類的實例和實際的類本身搞混了。在序列化對象被反序列化之前,該類必須加載。

+0

感謝您的快速響應。我認爲可能是這種情況,但對澄清這一點非常有幫助。 –

相關問題