2012-01-15 59 views
1

我想通過網絡發送類數據,我需要從類的名稱中獲取.class文件中的二進制數據。我想使用默認的類加載器,然後通過網絡發送加載的數據。我怎樣才能做到這一點?我正在使用scala 2.9.0.1和jre6如何從Class [_]對象獲取二進制數據?

+0

你想發送你的類的實例中的數據我們的類本身的字節代碼? – 2012-01-15 09:23:51

+0

我正在使用scala遠程演員。建立連接之後,我將我的課程實例從服務器發送到客戶端。如果在反序列化的時候我找不到類定義,我會向服務器發送一個請求。問題在這裏,如果服務器打包在jar文件中,我找不到要發回的內容。 – laci37 2012-01-15 13:19:26

回答

1

用文件分隔符替換完全限定類名中的句點,並將「.class」附加到結果中,這將成爲類路徑中.class文件的位置。然後使用ClassLoader以流的形式訪問該文件。

val location = className.replaceAll("\\.",File.separator) + ".class" 
val stream = ClassLoader.getSystemClassLoader().getResourceAsStream(location) 
//send the stream to your remote location 
+0

這似乎不適用於jar文件。 – laci37 2012-01-16 10:18:00

+0

它應該在類路徑中拾取任何東西,無論它是否在jar中。如果你遇到了麻煩,我想這個問題更可能是你正在使用的ClassLoader。如果你在一個名爲MyClass的類上嘗試這個,請嘗試如下所示:MyClass.class.getClassLoader()。getResourceAsStream(....) – 2012-01-16 18:57:44