[英]Java: .class file and java.lang.Class
java.lang.Class是否與實際的.class文件相同? 即內容是否等同?
我想通過套接字發送.class,並想知道如果我只是傳輸java.lang.Class而不是試圖找到並加載實際的.class文件?
精化 (如果您想了解更多信息,請閱讀)
假設我有一個名為SomeObj的Java類。 編譯此文件時,將生成名為SomeObj.class的文件。
我們也知道如果我將SomeObj作為一個類型,我們可以通過執行以下操作來獲取其java.lang.Class類型:
Class someObjClss = SomeObj.class;
我們知道java.lang.Class實現了Serializable,因此可以傳輸。
那么java.lang.Class基本上是實際.class文件的對象表示嗎?
更新:
假設我已將.class文件傳輸到另一台主機,我是否只使用defineClass()方法構建該類?
鏈接在這里
UPDATE2:
此代碼確實返回null InputStream。 怎么可能?
Class clazz = String.class;
String className = clazz.getName(); System.out.println(className);
URL url = clazz.getResource(className);
if( url != null )
{
String pathName = url.getPath(); System.out.println(className);
}
InputStream inputStream = clazz.getResourceAsStream(className);
if(inputStream != null )
{
System.out.println(inputStream.available());
}
java.lang.Class
是java類。 它有自己的.class文件:-) java.lang.Class
一個實例用於表示對象的類,允許您對其執行某些操作(例如,使用反射API)。
序列化根本與.class文件無關 - 它是被序列化的對象狀態 。 如果您要序列化Class<MyObject>
並通過線路將其發送到沒有MyObject.class的JVM,它仍然不知道MyObject是什么。
為什么你需要手動發送.class開頭? 有遠程類加載器來處理這個問題。
java.lang.Class
實例與相應的“.class”文件相關,但它們並不等效。
java.lang.Class
實例對“.class”文件的類型簽名進行編碼,但不是很多。 因此,盡管可以序列化java.lang.Class
,但這樣做並不足以允許在另一端實例化相應類的實例。 如果你想這樣做,你應該發送“.class”文件。
我認為OP正在嘗試在類路徑中識別存在類文件的文件。 見http://asolntsev.blogspot.com/2008/03/how-to-find-which-jar-file-contains.html
看一下RMI(遠程方法調用) 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.