जावा: वास्तव में NIO और NIO.2 के बीच अंतर क्या है?


85

मुझे यह समझ में नहीं आया कि वे एक दूसरे से कितने अलग हैं इसलिए मुझे इन दोनों पैकेजों के बारे में कुछ पूछताछ करनी है।

Google पर थोड़ा सा देखने के बाद, ऐसा लगता है कि Oracle ने JDK7 रिलीज़ के हिस्से के रूप NIOमें नए और उन्नत NIO.2पैकेज के साथ पैकेज को अपडेट करने का निर्णय लिया है ।

  1. NIOपैकेज के प्रदर्शन की तुलना पैकेज से कैसे की जाती है NIO.2?
  2. से कुछ बड़े बदलाव क्या हैं NIOकरने के लिए NIO.2? (उदाहरण के लिए नए तरीके, सुविधाएँ)
  3. मूल NIOपैकेज को अपडेट क्यों करना पड़ा?
  4. क्या आजकल पैकेज का NIO.2केवल पर्यायवाची NIOहै?

ऐसा नहीं है कि मैं अपने कोड में विरासत पैकेज का उपयोग करना चाहता हूं, मैं वास्तव में इस बारे में उत्सुक हूं। कृपया मुझे उनके अंतर बताएं?


2
NIO2 एसिंक्रोनस I / O और java.nio.files पैकेज का परिचय देता है।
user207421

क्या यही है? मुझे यह आभास था कि NIO.2 कुछ बहुत बड़ा था।
जॉन ह्यहन्ह

1
पहले उन्होंने आई.ओ. फिर उन्होंने "न्यू आईओ" की शुरुआत की। तब वे अधिक कार्यक्षमता का परिचय देना चाहते थे, इसलिए उन्होंने इसे चतुराई से "न्यू आईओ 2" नाम दिया।
कायामन

1
धन्यवाद, मुझे लगा। तो क्या इसका मतलब यह है कि "न्यू आईओ 2" अन्य दो तरीकों से बेहतर है? मैं "द जावा ट्यूटोरियल" पुस्तक पढ़ रहा हूं और यह NIO.2 के बारे में सिखाता है, लेकिन इसमें IO पर एक खंड भी है।
जॉन हुइन्ह

1
@ जॉनहोइन नहीं, इसका मतलब है कि यह नई सुविधाओं का परिचय देता है। यदि आपको उनकी आवश्यकता नहीं है, तो उनका उपयोग न करें।
user207421

जवाबों:


86

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

  • फ़ाइल वर्ग में कुछ महत्वपूर्ण कार्यक्षमता का अभाव था, जैसे कि प्रतिलिपि विधि।
  • इसने कई तरीकों को भी परिभाषित किया जो वापस आ गए boolean। जैसा कि कोई कल्पना कर सकता है, एक त्रुटि के मामले में, falseएक अपवाद को फेंकने के बजाय वापस कर दिया गया था। डेवलपर के पास वास्तव में यह जानने का कोई तरीका नहीं था कि वह असफल क्यों हुआ।
  • प्रतीकात्मक लिंक के समर्थन पर अच्छी हैंडलिंग प्रदान नहीं की।
  • फ़ाइल विशेषताओं का एक सीमित सेट प्रदान किया गया था।

इन समस्याओं को दूर करने के लिए java.nio पैकेज java 4 में पेश किया गया था। प्रमुख विशेषताएं इस प्रकार थीं:

  • चैनल और चयनकर्ता: एक चैनल निचले स्तर की फ़ाइल सिस्टम सुविधाओं, जैसे कि मेमोरी-मैप्ड फ़ाइलों पर एक अमूर्त है।
  • बफर: सभी आदिम वर्गों (बूलियन को छोड़कर) के लिए बफरिंग।
  • चारसेट: चारसेट (java.nio.charset), एनकोडर और डिकोडर्स बाइट्स और यूनिकोड प्रतीकों को मैप करने के लिए

जावा 7 के साथ java.nio.file पैकेज को प्रतीकात्मक लिंक, फ़ाइल विशेषताएँ एक्सेस और विशेष रूप से पथ, पथ और फ़ाइलों जैसी कक्षाओं के माध्यम से विस्तारित फ़ाइल सिस्टम का समर्थन करने के लिए बेहतर समर्थन प्रदान करने के लिए पेश किया गया है। इस बारे में अधिक जानकारी प्राप्त करने के लिए आप java.nio.file पैकेज विवरण पर एक नज़र डालना चाहते हैं ।

इसे ध्यान में रखते:

NIO से NIO.2 में कुछ बड़े बदलाव क्या हैं? (उदाहरण के लिए नए तरीके, सुविधाएँ)?

वे विभिन्न उद्देश्यों की पूर्ति करते हैं। बड़े परिवर्तनों को इंगित करने के लिए आप सभी नए पैकेज को देखना चाहेंगे java.nio.file

मूल NIO पैकेज को अपडेट क्यों करना पड़ा?

यह नहीं था अद्यतन के बजाय एक नया पैकेज पेश किया गया था।

क्या NIO.2 आजकल केवल NIO पैकेज का पर्याय है? NIO पैकेज का प्रदर्शन NIO.2 पैकेज के साथ कैसे तुलना करता है?

नहीं, वे पर्यायवाची नहीं हैं। उनके बीच प्रदर्शन की तुलना करने का भी कोई मतलब नहीं है, क्योंकि वे विभिन्न उद्देश्यों की पूर्ति करते हैं। NIO एक अधिक अमूर्त निम्न स्तरीय डेटा I / O और NIO2 फ़ाइल प्रबंधन पर केंद्रित है।

उम्मीद है की यह मदद करेगा।

[ग्रंथ सूची: ओरेगॉन सर्टिफाइड प्रोफेशनल जावा SE7 - एक व्यापक OCJP7 सर्टिफिकेशन गाइड, SGGanesh और तुषार शर्मा द्वारा - अध्याय 9]


56

NIO.2 ने एसिंक्रोनस i / o पेश किया

अतुल्यकालिक I / O गैर-अवरोधक i / o के लिए एक दृष्टिकोण है जो NIO द्वारा समर्थित नहीं है।

NIO: चयनकर्ता / रिएक्टर पैटर्न

NIO.2: पूरा करने वाले हैंडलर / प्रॉक्टर पैटर्न

इस प्रकार जब विंडोज पर, NIO.2 I / O पूर्णता पोर्ट का उपयोग करता है , जो प्रदर्शन को बढ़ावा देना चाहिए। सिवाय, किसी को पता नहीं है, क्योंकि कोई भी सर्वर साइड पर विंडोज का उपयोग नहीं करता है, और यदि वे करते हैं, तो वे शायद ऐसा इसलिए करते हैं क्योंकि वे भारी रूप से इनवेस्ट में निवेश करते हैं, और इस कारण से संभवतः जावा का उपयोग करने पर विचार नहीं करेंगे।


3
नेवर से नेवर। जब विशेष रूप से अनुमानित काम का बोझ इतना अधिक नहीं होता है तो कई विंडोज आधारित सर्वर उपयोग में होते हैं।
जोनाथन रोजेन

रिएक्टर proactor बनाम मैं क्या सबसे देखा है
Lefteris ELEFTHERIADES

1
मेरी कंपनी में बहुत सारे विंडोज सर्वर, जो एक प्रमुख वित्तीय संगठन है, और हम मुख्य रूप से जावा का उपयोग करते हैं।
बजे जनक मीणा

9

मेरा स्वीकार कर लेना:

लघु संस्करण

यह java.nio.file पैकेज के अलावा इसकी उच्च स्तरीय फ़ाइल और फ़ाइल सिस्टम कार्यक्षमता को बढ़ाता है।
नेटवर्क सॉकेट या निम्न स्तर फ़ाइल अभिगम के दृष्टिकोण से, कुछ सुविधा सुधार के साथ NIO == NIO.2।

लंबा संस्करण

जावा आईओ

पैकेज: java.io
पुराना अवरोधक I / O API

जावा एनआईओ

जावा 1.4 में जोड़ा गया, नया गैर-अवरुद्ध एपीआई।
पैकेज: java.nio
जावा गैर-अवरुद्ध IO। वर्गों की तरह Selector, SelectorKey, Channel
मुझे ऐसा लगता है NIO आई / ओ (नेटवर्क के लिए एक बड़ा कदम था Selector, SelectorKey, SocketChannel, ServerSocketChannel, Buffer), ज्यादा फ़ाइल के लिए कम आई / ओ ( FileChannelऔर Bufferकेवल, स्मृति सहित मैप किया फ़ाइलें)। यह नेटवर्क और फ़ाइल भागों दोनों के लिए एक काफी निम्न स्तर की एपीआई है।

जावा NIO.2

जावा 7. में जोड़ा गया यह मुख्य रूप से बहुत बेहतर फ़ाइल और फाइलसिस्टम हेरफेर और एपीआई को संबोधित करने के बारे में है। नई फ़ाइल और फाइल सिस्टम संबंधित एपीआई अपेक्षाकृत उच्च स्तर का है।

पैकेज: java.nio.fileऔर माता-पिता के लिए कुछ अतिरिक्त java.nio
यह परिवर्धन फ़ाइल I / O के लिए है और नेटवर्क I / O या निम्न स्तर की फ़ाइल API में केवल कुछ छोटे परिवर्धन हैं।

सबसे उल्लेखनीय निम्न-स्तर, आवश्यक फ़ाइल से संबंधित नहीं, एपीआई परिवर्धन हैं AsynchronousSocketChannel, AsynchronousServerSocketChannelऔर AsynchronousFileChannel, जो कुछ विधियों में कॉलबैक संस्करण जोड़ता है। अतुल्यकालिक संस्करण मुख्य रूप से एक सुविधा जोड़ हैं; इस तरह के मैपिंग इंटरफेस पहले भी एक साथ हैक किए जा सकते थे, लेकिन अब वे JRE में आउट-ऑफ-द बॉक्स उपलब्ध हैं।

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

नेटवर्क सॉकेट्स या निम्न स्तर फ़ाइल एक्सेस के दृष्टिकोण से, जो मैंने पहले ही ऊपर कहा है, को दोहराते हुए, NIO == NIO.2

प्रासंगिक लिंक

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.