2011-04-23 20 views
5

मैं वास्तव में विभिन्न आईओ कक्षाओं के उद्देश्य के बारे में उलझन में हूं, उदाहरण के लिए, यदि हमारे पास BufferedWriter है, तो हमें प्रिंटवाइटर की आवश्यकता क्यों है?प्रिंटवाइटर की आवश्यकता क्यों है?

BufferedReader reader = new BufferedReader(new FileReader(file)); 
String line = null;  
while(s=br.readline()!=null) { 
     PrintWriter fs = new PrintWriter(new FileWriter(file)); 
     fs.println(s); 
} 

यदि BufferedWriter मदद नहीं कर सकता है? मैं इन आईओ कक्षाओं के बीच अंतर को समझ नहीं पा रहा हूं, क्या कोई मुझे समझा सकता है?

+0

नोड, ये जावा आईओ "स्ट्रीम" कक्षाएं वास्तव में उलझन में हैं। मैं आसानी से इनपुटस्ट्रीम, आउटपुटस्ट्रीम (बस बाइट्स) और buffered संस्करणों को grok कर सकते हैं लेकिन इससे परे यह उलझन में हो जाता है। – seand

+0

2 मुख्य कारण हैं कि उन तरह के वर्ग अलग क्यों हैं: 1. बफरिंग क्षमताओं 2. नए जावा संस्करणों में अतिरिक्त क्षमताओं, जो नए मौजूदा तरीकों के बारे में भ्रमित नहीं होने का प्रयास करते हैं, बल्कि डेवलपर को प्रेरित करके एक नई कक्षा बनाते हैं '@since' JavaDoc तत्व की जांच करने के लिए –

उत्तर

6

उनके पास एक-दूसरे के साथ कुछ लेना देना नहीं है। सच में, मैं शायद ही कभी PrintWriter का उपयोग System.out अस्थायी रूप से कनवर्ट करने के अलावा करता हूं। लेकिन वैसे भी।

BufferedWriter, जैसे BufferedReader/BufferedInputStream/BufferedOutputStream महज एक स्मृति बफर के साथ संलग्न Writer से सजाया गया (आप आकार निर्दिष्ट कर सकते हैं) या एक डिफ़ॉल्ट स्वीकार करते हैं। नेटवर्क या फ़ाइल आधारित जैसे लेखकों को धीमा करने के लिए लिखते समय यह बहुत उपयोगी होता है। (सामग्री स्मृति में प्रतिबद्ध है और उदाहरण के लिए कभी-कभी डिस्क पर) स्मृति में बफर करके गति बहुत बढ़ जाती है - केवल FileWriter के साथ 10 एमबी फ़ाइल कहने के लिए लिखने वाले कोड को लिखने का प्रयास करें और उसके बाद इसके आसपास लिपटे BufferedWriter के साथ तुलना करें।

तो यह BufferedWriter है। यह कुछ सुविधा विधियों में फेंकता है, लेकिन ज्यादातर यह सिर्फ यह मेमोरी बफर प्रदान करता है।

PrintWriter ज्यादातर एक सरल डेकोरेटर कि, String, float, आदि जैसे विभिन्न प्रकारों के लिए कुछ विशेष लिखने के तरीकों कहते हैं तो आप कच्चे बाइट्स के लिए सब कुछ परिवर्तित करने के लिए नहीं है।

संपादित:

This पहले से ही आ गया है

4

PrintWriter अनिवार्य रूप से एक सुविधा वर्ग है। यदि आप टेक्स्ट की एक पंक्ति को जल्दी और आसानी से विस्फोट करना चाहते हैं उदा। एक लॉग फ़ाइल, प्रिंटवाइटर इसे बहुत आसान बनाता है।

तीन विशेषताएं:

  • print और println तरीकों किसी भी डेटा प्रकार लेने के लिए और आप के लिए रूपांतरण करेंगे। सिर्फ String नहीं।
  • अपेक्षाकृत नया format विधि सोने में इसके वजन के लायक है। अब जावा में सी-स्टाइल प्रारूप नियंत्रण के साथ टेक्स्ट की एक पंक्ति आउटपुट करने के लिए सी में उतना आसान है।
  • विधियां कभी अपवाद नहीं फेंकती हैं! कुछ प्रोग्रामर गलत चीजों के बारे में कभी नहीं सुनते होने की संभावना पर डरते हैं। लेकिन अगर यह एक फेंकने वाला कार्यक्रम है या कुछ सचमुच सरल कर रहा है, तो सुविधा अच्छी हो सकती है। विशेष रूप से अगर आउटपुट System.out या System.err है जिसमें गलत होने के कुछ तरीके हैं।
1

प्रिंटवाइटर का उपयोग करने का मुख्य कारण printXXX विधियों (जैसे println (int) तक पहुंच प्राप्त करना है। आप अनिवार्य रूप से एक फ़ाइल लिखने के लिए प्रिंटवाइटर का उपयोग कर सकते हैं जैसे कि आप कंसोल पर लिखने के लिए System.out का उपयोग करेंगे।

एक BufferedWriter फ़ाइल (या कुछ और) को लिखने का एक प्रभावी तरीका है क्योंकि यह फ़ाइल में लिखने से पहले जावा मेमोरी में वर्णों को बफर करेगा।

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