2010-07-04 12 views
7

पर जावा-बाइट-कोड लोड करें मुझे कुछ जावा-बाइट-कोड (इतना संकलित जावा-स्रोत) मिला है जो मेरे प्रोग्राम में जेनरेट किया गया है। अब मैं वर्तमान में चल रहे जावा-वीएम में इस बाइट-कोड को लोड करना चाहता हूं और एक विशिष्ट फ़ंक्शन चला सकता हूं। मुझे यकीन नहीं है कि इसे कैसे पूरा किया जाए, मैंने जावा क्लासलोडर्स में थोड़ी सी खुदाई की लेकिन मुझे कोई सीधा रास्ता नहीं मिला।रनटाइम

मुझे एक समाधान मिला जो हार्डडिस्क पर एक क्लास-फ़ाइल लेता है, लेकिन बाइट-एरे में बाइटकोड मिला है और मैं इसे डिस्क पर लिखना नहीं चाहता हूं बल्कि इसके बजाय सीधे इसका उपयोग करना चाहता हूं।

धन्यवाद!

+0

मैं इस लिंक के तहत लगता है कि आप के लिए आप क्या देख रहे हैं खोजने चाहिए overloads लिखने की ज़रूरत //tutorials.jenkov। कॉम/जावा-प्रतिबिंब/गतिशील-श्रेणी-लोडिंग-reloading.html अंतिम अनुभाग "क्लासलोडर लोड/पुनः लोड उदाहरण" देखें। –

+0

मेरा प्रश्न किसी भी तरह अस्पष्ट था: मुझे कक्षा-फ़ाइल नहीं मिली है लेकिन बाइट-सरणी है और मैं इसे सीधे लोड करना चाहता हूं। फिर भी धन्यवाद! – theomega

+0

और मुझे पूरा यकीन है कि मेरा लिंक बिल्कुल प्रदान किया गया है। कम से कम मैंने इसे इसके माध्यम से पाया: http://java.sun.com/j2se/1.4.2/docs/api/java/lang/ClassLoader.html#defineClass (बाइट [], int, int) इसके अलावा आप भी कर सकते हैं स्पष्ट रूप से हमेशा अपने बाइट-सरणी को एक अस्थायी निर्देशिका में सहेजें। –

उत्तर

9

से आप एक कस्टम वर्ग लोडर कि findClass विधि

public Class findClass(String name) { 
    byte[] b = ... // get the bytes from wherever they are generated 
    return defineClass(name, b, 0, b.length); 
} 
+0

धन्यवाद, प्राप्त करने के तरीके की तरह लगता है, लेकिन एक custon क्लासलोडर लिखने के बिना कोई सीधा तरीका नहीं है? – theomega

+0

कम से कम कोई भी मुझे अब तक नहीं मिला है –

+0

बहुत अच्छा काम करता है, धन्यवाद! – theomega

2

यदि बाइट कोड चल रहे प्रोग्राम के क्लासपाथ पर नहीं है, तो आप URLClassLoader का उपयोग कर सकते हैं। http: http://www.exampledepot.com/egs/java.lang/LoadClass.html

// Create a File object on the root of the directory containing the class file 
File file = new File("c:\\myclasses\\"); 

try { 
    // Convert File to a URL 
    URL url = file.toURL();   // file:/c:/myclasses/ 
    URL[] urls = new URL[]{url}; 

    // Create a new class loader with the directory 
    ClassLoader cl = new URLClassLoader(urls); 

    // Load in the class; MyClass.class should be located in 
    // the directory file:/c:/myclasses/com/mycompany 
    Class cls = cl.loadClass("com.mycompany.MyClass"); 
} catch (MalformedURLException e) { 
} catch (ClassNotFoundException e) { 
} 
+0

मेरा प्रश्न किसी भी तरह अस्पष्ट था: मुझे कक्षा-फ़ाइल नहीं मिली है लेकिन एक बाइट-सरणी है और मैं इसे सीधे लोड करना चाहता हूं। फिर भी धन्यवाद! – theomega

+0

अधिक सटीक होने के लिए अपने प्रश्न को संपादित करने के लिए स्वतंत्र महसूस करें। उद्धृत कोड क्लास फाइलों के साथ काम करता है हार्डडिस्क। –