2010-06-17 19 views
7

सार्वजनिक इनपुट स्ट्रीम क्यों मिलता है रिसोर्सएस्ट्रीम (स्ट्रिंग नाम) कक्षा वर्ग में है? यह सिर्फ फाइल की इनपुटस्ट्रीम देता है जो जार फ़ाइल में है और क्लास क्लास के साथ कोई संबंध नहीं है। इसलिए यह स्थिर विधि हो सकती है और यह किसी भी वर्ग में हो सकती है।क्यों क्लास क्लास में रिसोर्सएस्ट्रीम विधि है?

उत्तर

9

वहाँ वर्ग के लिए एक रिश्ता है:

  • वर्ग के पैकेज को ध्यान में रखा जाता है - अगर आप foo.bar.SomeClass के लिए वर्ग पर कॉल getResourceAsStream("baz.txt") इसके लिए /foo/bar/baz.txt
  • classloader दिखेगा देना संसाधनों को पहली जगह खोजने के लिए ध्यान में रखा जाता है - यदि यह एक स्थिर विधि थी, तो यह कैसे पता चलेगा कि कौन सी जार फाइलें (आदि) देखने के लिए? वहाँ प्रणाली classloader
1

यह सिर्फ फ़ाइल जो जार फ़ाइल में है की InputStream दे ...

गलत की तुलना में जीवन के लिए अधिक है। सभी क्लासलोडर नियमित JAR फ़ाइल से संसाधन लोड नहीं करते हैं।

  • कुछ क्लासलोडर निर्देशिका से लोड होते हैं।
  • कुछ क्लासलोडर नेटवर्क से लोड होते हैं।
  • कुछ क्लासलोडर एकाधिक स्रोतों से लोड होते हैं।

इस जटिलता के सभी आप से छिपा हुआ है जब आप इस मामले में Class के माध्यम से ClassLoader एपीआई का उपयोग करें।

... और कक्षा वर्ग के साथ कोई संबंध नहीं है।

गलत। @ जोन स्कीट का जवाब देखें। ध्यान दें कि Class.getResourceAsStream(String) पर कॉल करना एक संसाधन देता है जो कक्षा के समान सुरक्षा संदर्भ से संबंधित है। यदि उपयोग में एकाधिक क्लासलोडर/सुरक्षा संदर्भ हैं तो यह बहुत महत्वपूर्ण हो सकता है।

संबंधित मुद्दे