-2

我正在寫一個工具,需要從字節數組中獲取java.io.Serializable的實例。
困難在於「真正的」類不是(也不能是......)在類路徑上(我不會解釋爲什麼在這裏..)。下面
的代碼失敗的is.readObject()ClassNotFoundException因爲實現類是不是在classpath
問:
是有可能做到這一點?通過反思?通過使用Unsafe?通過使用子類ClassLoader?要麼...?如何在沒有類路徑上的實現類的情況下反序列化「序列化」實例?

byte[] data = ... 
try (ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(data));) { 
    Object o = ois.readObject(); 
    Serializable s = (Serializable)o; 
} 
+1

*是否可以實現這一點?*不是沒有實施。是的,你可以寫一個'ClassLoader'來加載'class'。但是,然後你又回到了需要這門課。 –

+0

同上Eliott說的。 Java序列化只發送一個類的數據,而不是類本身(不是數據的方法或定義)。沒有課堂,你就沉沒了。 – markspace

+0

我想知道爲什麼downvotes ...問這樣的問題是「壞」?或誘使其他用戶出錯?或者給一個虛假的激光?我不這麼認爲。 – titou10

回答

1

在IIS可能實現這一目標?

由反射號?

使用不安全

號?

通過使用子類類加載器的?

是的,但類加載器仍然必須從某個地方得到類。 RMI代碼庫功能就是一個很好的例子。

+0

我正在使用JEE和JMS API。在JMS中有一個「ObjectMessage」類(http://docs.oracle.com/javaee/7/api/javax/jms/ObjectMessage.html),可以封裝一個「可序列化」的對象。你可以用getObject()方法獲得這個序列化。即使實現類不在類路徑上,該方法也可以工作。所以我想我需要反編譯這個API的實現來檢查他們是如何做到的 – titou10

相關問題