Java: .class File و Java.lang.class
-
21-09-2019 - |
سؤال
هل java.lang.class هو نفسه ملف .class الفعلي؟ أي هل المحتوى مكافئ؟
أريد إرسال .class عبر المقبس ، وكنت أتساءل عما إذا كان بدلاً من محاولة العثور على ملف .class الفعلي وتحميله ، إذا كان بإمكاني إرسال java.lang.class بدلاً من ذلك؟
التفصيل (اقرأ إذا كنت تريد المزيد من المعلومات)
لنفترض أن لدي فئة Java تسمى SomeObj. عند تجميع هذا الملف ، سيتم إنشاء ملف يسمى SomeObj.class.
نعلم أيضًا أنه إذا كان لدي بعض الشيء كنوع ، فيمكننا الحصول على نوع java.lang.class عن طريق العمل:
Class someObjClss = SomeObj.class;
نحن نعلم java.lang.class الأدوات التسلسلية ، وبالتالي يمكن نقلها.
فهل java.lang.class أساسًا تمثيل كائن ملف .class الفعلي؟
تحديث:
على افتراض أنني قمت بنقل ملف .class إلى مضيف آخر ، هل يمكنني فقط استخدام طريقة DefereClass () لبناء الفصل مرة أخرى؟
وصلة هنا
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
هو فئة جافا. لديها ملف .class الخاص به :-) نموذج من java.lang.Class
يستخدم ل تركيز فئة من كائنك تسمح لك بإجراء عمليات معينة (مثل استخدام API) على ذلك.
التسلسل لا علاقة له بملف .class على الإطلاق - إنه حالة الكائن التي تحصل على التسلسل. إذا كنت تريد التسلسل Class<MyObject>
وأرسل ذلك فوق السلك إلى JVM الذي لا يحتوي على myobject.class ، لا يزال لا يعرف ماهية myobject.
لماذا تحتاج إلى يدويًا أرسل .class فوق السلك لتبدأ؟ هناك لوادر فئة عن بُعد للتعامل مع هذا.
نصائح أخرى
أ java.lang.Class
يرتبط المثيل بملف ".class" المقابل ، لكنه لا يعادل بأي حال من الأحوال.
ال java.lang.Class
يقوم المثيل بتشفير توقيع النوع لملف ".class" ، ولكن ليس أكثر من ذلك بكثير. لذلك ، على الرغم من أ java.lang.Class
يمكن أن يكون متسلسلًا ، لا يوفر لك ذلك ما يكفي للسماح بتأسيس مثيل للفئة المقابلة في الطرف الآخر. إذا كنت تريد القيام بذلك ، فيجب أن ترسل ملف ".class".
أعتقد أن OP يحاول تحديد ملف على ClassPath الذي يوجد فيه ملف الفصل. يرى http://asolntsev.blogspot.com/2008/03/how-to-find-hich-jar-file-contains.html
ألق نظرة على RMI (احتجاج الطريقة عن بعد).