2014-03-06 23 views
0

可以將類從URLClassLoader保存到普通的file.class中嗎?然後反編譯它?將類從URLClassLoader保存到文件?並反編譯它?

我試圖將它保存就像使用

 Class<?> clazz = classLoader.loadClass("foo.Bar"); 
     FileOutputStream sf = new FileOutputStream(f); 
     ObjectOutputStream s = new ObjectOutputStream(sf); 
     s.writeObject(clazz); 
     s.close(); 

卜對象不起作用。

那麼...如何反編譯它呢?我需要得到類似於jd-gui的結果,但使用URLClassLoader中的類。

回答

2

您需要將類名(例如"foo.Bar")映射到資源路徑名(例如"/foo/Bar.class"),然後使用classLoader.getResourceAsStream打開流以讀取字節碼文件。

理論上來說,這可以送到一個反編譯器......假設你有一個可以從InputStream讀取的反編譯器。


什麼你此刻正在做,因爲Class對象不能被序列化失敗。

0

做一個簡單的HTTP下載,而不是URLClassLoader,將類獲取到文件中。然後反編譯。

(對象寫入到ObjectOutputStream中只保存數據對象的實例,甚至認爲只有當對象已實現序列化的作品。你要找什麼不是在這裏。)