2012-04-29 8 views
16

के साथ विधियां उपलब्ध हैं I जावा जावा पैकेज सीख रहा था और मुझे एहसास हुआ कि फ़ाइल द्वारा पहले से ही कई विधियां उपलब्ध कराई गई हैं जो nio.Files पथ वर्ग का उपयोग करके फिर से प्रदान कर रही हैं। मुझे कुछ और पसंद आया। मैं वास्तव में नहीं प्राप्त कर रहा हूं कि एनओओ पैकेज का वास्तविक उपयोग क्या है।जावा एनओओ पैकेज का सटीक उपयोग क्या है जब पहले से ही io पैकेज

मैं इस पैकेज के लिए बहुत नया हूं इसलिए मेरा प्रश्न गलत है लेकिन थोड़ी मदद मुझे आगे पढ़ने के लिए प्रोत्साहित कर सकती है।

+2

नहीं * answser *, इसलिए मैं एक टिप्पणी पोस्ट करूंगा: [उस पर विकिपीडिया पृष्ठ] (http://en.wikipedia.org/wiki/New_I/O) कुछ लक्ष्यों और कारणों के बारे में चर्चा करता है एनओओ पैकेज। –

+0

पेडेंटिक होने के नाते, "पथ" जावा 7 में जोड़े गए एनआईओ 2 लाइब्रेरी का हिस्सा है। बीटीडब्ल्यू: गैर-अवरुद्ध एनआईओ सॉकेट पर बहुत अधिक ध्यान केंद्रित होने पर, मैं आमतौर पर एनआईओ सॉकेट को अवरुद्ध करने का उपयोग करता हूं जो आईएमएचओ का उपयोग करने के लिए आसान हैं। एनआईओ 2 सॉकेट और फ़ाइलों के लिए एसिंक्रोनस एनआईओ जोड़ें। –

उत्तर

8

आईओ और एनआईओ के बीच मुख्य अंतर यह है कि आईओ अवरुद्ध है, जबकि एनआईओ गैर-अवरुद्ध है।

This article पैकेज में अंतर और क्या ब्लॉकिंग और गैर-अवरुद्ध आईओ है, बताता है।

+22

कृपया एक लिंक पोस्ट न करें। जब वह लिंक मर जाता है, तो यह जवाब भी देता है। –

+2

एनआईओ अवरुद्ध, गैर-अवरुद्ध, या असीमित हो सकता है। यह बिल्कुल मुख्य अंतर नहीं है। – EJP

+0

@ डेको अवरोधक कारक 'java.io.File' बनाम' java.nio.file' के लिए भी अच्छा है? – overexchange

1

java.io.File में लगभग हर विधि में ऐसे मुद्दे हैं जिन्हें संगतता कारणों के लिए तय नहीं किया जा सकता है, सबसे स्पष्ट यह है कि विधियां विफल होने पर एक बूलियन लौटाती हैं। इन मुद्दों के साथ प्लगिंग फ़ाइल सिस्टम और कई अन्य चीजों का समर्थन करने की इच्छा पूरी तरह से एक नई फाइल सिस्टम एपीआई के विकास की जरुरत है, इसलिए यही कारण है कि java.nio.file बनाया गया था।

7

जावा प्रोग्रामिंग, आई/ओ हाल ही में स्ट्रीम रूपक का उपयोग करके किया गया है। सभी I/O को एक बाइट्स के आंदोलन के रूप में देखा जाता है, एक समय में, स्ट्रीम नामक ऑब्जेक्ट के माध्यम से। स्ट्रीम I/O बाहरी दुनिया से संपर्क करने के लिए उपयोग किया जाता है। वस्तुओं को बाइट्स में बदलने और फिर वस्तुओं में वापस लाने के लिए आंतरिक रूप से इसका भी उपयोग किया जाता है।

एनआईओ की मूल भूमिका I/O के समान भूमिका और उद्देश्य है, लेकिन यह एक अलग रूपक - ब्लॉक I/O का उपयोग करता है। java.nio (नया/गैर-अवरुद्ध I/O)) एपीआई जेडीके 1.4 के साथ पेश किया गया था।

धारा I/O और ब्लॉक I/O के बीच क्या अंतर है?

एक धारा-उन्मुख I/O सिस्टम एक समय में डेटा एक बाइट से संबंधित है। एक इनपुट स्ट्रीम डेटा के एक बाइट उत्पन्न करता है, और आउटपुट स्ट्रीम डेटा के एक बाइट का उपभोग करता है। स्ट्रीम किए गए डेटा के लिए फ़िल्टर बनाना बहुत आसान है। यह कई फिल्टरों को एकसाथ श्रृंखला के साथ अपेक्षाकृत सरल है ताकि प्रत्येक व्यक्ति एक एकल, परिष्कृत प्रसंस्करण तंत्र की मात्रा में अपना हिस्सा बना सके। फ्लिप पक्ष पर, धारा-उन्मुख I/O अक्सर धीमा होता है।

ब्लॉक-उन्मुख I/O सिस्टम ब्लॉक में डेटा के साथ सौदा करता है। प्रत्येक ऑपरेशन एक चरण में डेटा के ब्लॉक का उत्पादन या उपभोग करता है। ब्लॉक द्वारा प्रसंस्करण डेटा (स्ट्रीम किए गए) बाइट द्वारा इसे संसाधित करने से कहीं अधिक तेज़ हो सकता है। लेकिन ब्लॉक उन्मुख I/O में धारा-उन्मुख I/O की कुछ लालित्य और सादगी की कमी है।

जब आपको java.io का उपयोग करना चाहिए और आपको java.nio कब पसंद करना चाहिए?

  1. अनुमापकता शायद पैकेज की अपनी पसंद मिलेगी। java.net प्रति सॉकेट एक थ्रेड की आवश्यकता होगी। कोडिंग यह काफी आसान होगा। java.nio बहुत अधिक कुशल है, लेकिन चारों ओर कोड करना मुश्किल है।

  2. हजारों कनेक्शनों से निपटने के बाद आपको बेहतर स्केलेबिलिटी मिल सकती है, लेकिन कम संख्या में आपको शायद आईओ अवरुद्ध करने के साथ बेहतर थ्रूपुट मिलेगा।

  3. एसएसएल जावा के साथ काम करते समय।NIO कुछ बात आसान के साथ

महत्वपूर्ण निपटने के लिए नहीं है: आप संकुल में से किसी के साथ काम कर रहे हैं, तो यह एक अच्छा विचार है जब तक खरोंच से ढांचा बनाने के लिए नहीं है और जब तक आप ऐसा करने के लिए एक सम्मोहक कारण है इसलिए।

java.nio के लिए, ग्रिज़ली और क्विक सर्वर जैसी परियोजनाएं पुन: प्रयोज्य गैर अवरोधक सर्वर घटक प्रदान करती हैं।

पढ़ने Pain points with java.nio

वर्थ अंत में यह अपनी परियोजनाओं और क्या आप प्राप्त करने के लिए कोशिश कर रहे हैं की विशिष्ट आवश्यकताओं के लिए निर्भर करता है। कुछ बेहतरीन समाधानों में अल

अद्यतन पर सबसे जटिल आधारभूत संरचना की आवश्यकता नहीं हो सकती है अद्यतन: हाल ही में एनआईओ 2 पैकेज के बारे में पता चला जो जेडीके 1.7 के बाद मौजूद है। एनआईओ 2 एनआईओ से अलग है, प्रमुख यह है कि एनआईओ 2 असीमित चैनल कार्यक्षमता प्रदान करता है। NIO.2 primer

यदि आप एनआईओ के साथ काम कर रहे हैं, तो अंतर के माध्यम से जाने के लायक है और कौन सा उद्देश्य आपके उद्देश्य के अनुरूप है।

+0

मुझे लगता है कि यह बेहतर जवाब – lolski

+0

है और यह उत्तर किसी पुस्तक की कॉपी-पेस्ट लगता है ... – CuriousMind

2

जावा NIO: चैनल और बफ़र
मानक आईओ एपीआई आप बाइट नदियों और चरित्र धाराओं के साथ काम करते हैं। एनआईओ में आप चैनल और बफर के साथ काम करते हैं। डेटा को हमेशा एक चैनल से बफर में पढ़ा जाता है, या एक बफर से एक चैनल में लिखा जाता है।

जावा NIO: गैर अवरुद्ध आईओ
जावा NIO आप गैर-अवरुद्ध आईओ करने के लिए सक्षम बनाता है। उदाहरण के लिए, एक थ्रेड एक चैनल को बफर में डेटा पढ़ने के लिए कह सकता है। जबकि चैनल बफर में डेटा पढ़ता है, थ्रेड कुछ और कर सकता है। एक बार डेटा बफर में पढ़ा जाता है, तो थ्रेड इसे संसाधित करना जारी रख सकता है। चैनलों को डेटा लिखने के लिए भी यही सच है।

जावा NIO: चयनकर्ता
जावा NIO "चयनकर्ताओं" की अवधारणा में शामिल है। एक चयनकर्ता एक वस्तु है जो घटनाओं के लिए कई चैनलों की निगरानी कर सकता है (जैसे: कनेक्शन खोला गया, डेटा आ गया आदि)। इस प्रकार, एक धागा डेटा के लिए एकाधिक चैनलों की निगरानी कर सकता है।
More detail on orcale

0

एनआईओ ने चैनलों को भी प्रस्तुत किया जो स्ट्रीम-फाइल, सॉकेट, नेटवर्क में विशेषज्ञता को दूर करते हैं।

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