2014-11-04 139 views
0

讀取對象時,如何可以加載從ObjectInputStream中讀取對象時未找到我怎樣才能加載從ObjectInputStream中

InputStream pis = new InputStream(); 
    ObjectInputStream ois = new ObjectInputStream(pis); 
    Object o = null; 
    try{ 
     o = ois.readObject(); 
    } 
    catch(ClassNotFoundException ex){ 
     //How to try to load a class to read object again????? 
     o = ois.readObject(); 
    } 

由於一個類未發現了一類, TH

+0

你打算從哪裏加載類? – 2014-11-04 08:25:53

+0

我只是想。我打算通過ClassNotFoundException從一個新類加載類。 – scarework 2014-11-04 10:53:25

回答

1

試圖反序列化對象時,您嘗試反序列化的對象的類應該已經存在於您的類路徑中。

如果遇到這種情況,我想你在運行時不能做很多事情。相反,您可以使用它來檢測是否仍然缺少類路徑中的類,並在開發過程中將其添加到項目和類路徑中。

+0

好吧,從技術上講,您可以創建一個自定義類加載器來從類路徑外部加載類。 – 2014-11-04 08:26:48

+0

@RobbyCornelissen是的,當然,但是這將需要分析丟失的類名,你將不得不知道從哪裏加載它。一般來說,這是不方便的。你將從哪裏加載這個類:'「com.expekertia.tools.CacheLoader」'? – icza 2014-11-04 08:29:00

+0

您確實必須知道從何處加載它。關於它是否方便,我想這將取決於情況。有時你沒有多少選擇。 – 2014-11-04 08:31:39

0

在兩端使用RMIClassLoader,並注意發送端的記錄要求。

0

如果班級已經搬遷,也可以拋出ClassNotFoundException

讓我們假設你序列化一個類實例。之後,由於一些重構,該類被移動。然後,由於舊的完全限定名稱不再有效,因此您被卡住了。沒有辦法從流中取回對象。