2014-09-12 8 views
10

मैंने जावा में आईओ के साथ बहुत कुछ किया है और प्राइमेटिव्स को बाइट एरे में बदलने के लिए कोड ढूंढने के बाद और पीछे मुझे जावा स्रोत कोड होस्टिंग वेबसाइटों में से एक पर java.io.Bits के लिए स्रोत मिला। एक त्वरित नज़र के बाद मुझे एहसास हुआ कि यह वही है जो मुझे चाहिए-इसके अलावा पैकेज-प्राइवेट। इसलिए मैंने एक प्रतिलिपि बनाई जिसे मैंने सार्वजनिक किया, मेरे प्रोजेक्ट के पैकेज में संग्रहीत किया और उपयोग किया (केवल निजी परियोजनाओं में, मैं आपको आश्वासन देता हूं)। मुझे यह बहुत उपयोगी लगता है।java.io.Bits सार्वजनिक क्यों नहीं है?

मेरा सवाल है, यह पैकेज-निजी क्यों है? मैं देख सकता हूं कि यह उन लोगों के लिए वास्तव में उपयोगी है जो आईओ के साथ काम करते हैं और मुझे सार्वजनिक रूप से इसकी दृश्यता को बदलने से कोई नुकसान नहीं दिखता है (rt.jar में)। या शायद एक समकक्ष है (और कृपया अन्य पुस्तकालयों का उल्लेख न करें)?

यहाँ एक अनियमित रूप से चुने वेबसाइट है कि java.io.Bits के लिए जावा स्रोत का लिंक है: http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/io/Bits.java

उत्तर

8

तुम्हें यकीन के लिए जावा devs के एक पूछने के लिए चाहते हैं, लेकिन यह निजी पैकेज बनाकर, एपीआई इलाज किया जा सकता "आंतरिक" के रूप में - यानी यह किसी भी समय बदल सकता है या गायब हो सकता है। इसका मतलब है कि एपीआई अपेक्षाकृत तेज़ी से विकसित किया जा सकता है, और उसी अपेक्षाकृत पूरी तरह से परीक्षण प्रक्रिया के माध्यम से जाने की आवश्यकता नहीं है जिसे सार्वजनिक एपीआई को पार करने की आवश्यकता है (जब से वे रिलीज़ हो जाते हैं, वे अच्छे से वहां फंस जाते हैं।)

संक्षेप में, एक एपीआई सार्वजनिक बनाने में दीर्घकालिक प्रभाव पड़ता है, और इसे केवल स्विच को मारने से ज्यादा काम करने की आवश्यकता होती है।

मुझे लगता है कि आईओ पैकेज में कुछ अन्य वर्गों के लिए उपयोगी कार्यों के समूह "एक साथ हैक" समूह के रूप में जीवन शुरू हुआ है, और यह तब से वहां रहा है।

+0

क्या आपको लगता है कि एक व्यक्तिगत प्रतिलिपि बनाना और इसे एप्लिकेशन के साथ वितरित करना ठीक है? – Nulano

+4

@ नूलानो - मुझे यकीन है कि यह नहीं है। हालांकि मुझे लगता है कि आपके ऐप के लाइसेंस पर निर्भर करता है। आधुनिक जेडीके जीपीएल मेरा मानना ​​है, इसलिए यदि आपका ऐप जीपीएल है, तो यह ठीक हो सकता है। – jtahlborn

+0

कोड में क्या देख रहा है, मैं इसका सुंदर मामूली कोड कहूंगा; ऐसी विधियों के लिए कहा गया है कि कोई भी सक्षम प्रोग्रामर बहुत ही समान (यदि समान नहीं है) कार्यान्वयन के साथ आएगा। उचित औचित्य नहीं है; मुझे लगता है कि कोड किसी भी कॉपीराइट उल्लंघन दावों को वारंट करने के लिए पर्याप्त मूल नहीं है। – Durandal

3

यह पैकेज-निजी, निश्चित है, लेकिन ऐसे सार्वजनिक एपीआई हैं जो समान व्यवहार का पर्दाफाश करते हैं, उदा। ByteBuffer.wrap(array).getInt(index) और ByteBuffer पर अन्य विधियां। जावा से आंतरिक कार्यान्वयन विवरण लपेटने या कॉपी करने की कोशिश करने से आप उचित रूप से डिज़ाइन किए गए, अच्छी तरह से प्रलेखित सार्वजनिक API का उपयोग करके लगभग निश्चित रूप से बेहतर तरीके से बेहतर हैं।

+0

मुझे लगता है कि यह स्वीकार करने का उत्तर है, लेकिन चूंकि मैं "स्वीकार कर सकता हूं "केवल एक ही जवाब, आपको केवल +1 मिलता है। – Nulano

+0

मैं बाइटबफर बनाम java.io के प्रदर्शन के बारे में अनिश्चित था।बिट्स ने एक त्वरित परीक्षण चलाया। परिणाम दिखाते हैं कि java.io.Bits को संग्रहीत करने के लिए पूर्ण बीबी के साथ सबसे तेज़ है, और पूर्ण बीबी पढ़ने के लिए रिश्तेदार बड़े एंडियन के साथ सबसे तेज़ और फिर थोड़ा अंत है, बिट्स सबसे धीमा है। मेरे परीक्षण के लिए विस्तृत परिणाम और src कोड के लिए एक पेस्टबिन लिंक यहां दिया गया है: http://pastebin.com/XStkmN8s – Nulano

+0

अद्यतन: मैंने अपनी उबंटू मशीन पर परीक्षण जोड़ने के लिए पेस्टबिन अपडेट किया। वे java.io.Bits के पक्ष में बहुत अधिक हैं, लेकिन बड़े एंडियन पूर्ण बाइटबफर पीछे हैं। – Nulano

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

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