2009-11-17 9 views
76

कृपया नीचे दिए गए कोड को देखें:Java.io.PrintWriter और java.io.BufferedWriter के बीच अंतर?

// A.class 
File file = new File("blah.txt"); 
FileWriter fileWriter = new FileWriter(file); 
PrintWriter printWriter = new PrintWriter(fileWriter); 

// B.class 
File file = new File("blah.txt"); 
FileWriter fileWriter = new FileWriter(file); 
BufferedWriter bWriter = new BufferedWriter(fileWriter); 

इन दो तरीकों के बीच क्या अंतर है?

हम BufferedWriter पर प्रिंटवाइटर का उपयोग कब करना चाहिए?

उत्तर

49

http://java.sun.com/javase/6/docs/api/java/io/BufferedWriter.html और http://java.sun.com/javase/6/docs/api/java/io/PrintWriter.html मतभेदों का विवरण दें।

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

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

ऐसी कोई अवधारणा नहीं है जैसे "प्रिंट रीडर" निकटतम आपको मिलेगा। शायद यह java.util.Scanner है।

+1

"फाइल के लेखन को करने के लिए सी को छोड़ना।" .... यूजीएच ... –

+2

@ ट्राइटनमैन किसी बिंदु पर इसे ओएस के साथ बातचीत करने की ज़रूरत है, जिसका अर्थ जावा के बाहर कदम उठाना है। – TofuBeer

72

PrintWriter अधिक तरीकों देता है (println), लेकिन सबसे महत्वपूर्ण (और चिंता) अंतर के बारे में पता है कि यह अपवाद निगल किया जाना है।

आप बाद में checkError पर कॉल कर सकते हैं यह देखने के लिए कि क्या कोई त्रुटि हुई है, लेकिन आम तौर पर आप कंसोल को लिखने जैसी चीजों के लिए PrintWriter का उपयोग करेंगे - या "त्वरित 'एन गंदे" ऐप्स में जहां आप बनना नहीं चाहते हैं अपवादों से परेशान (और जहां दीर्घकालिक विश्वसनीयता कोई मुद्दा नहीं है)। स्वरूपण स्पष्ट रूप से कई स्थानों में उपयोगी है जहाँ आप नहीं अपवाद नहीं करना चाहते हैं -

मुझे यकीन है कि क्यों "अतिरिक्त स्वरूपण क्षमताओं 'और' अपवाद निगल नहीं है" पहलुओं एक ही कक्षा में इकट्ठा किए गए नहीं कर रहा हूँ निगल गया। BufferedWriter को कुछ बिंदुओं पर समान क्षमताओं को देखना अच्छा लगेगा ...

+0

@ विंडीफिल्ड्स: नहीं, 'प्रिंटस्ट्रीम' एक 'आउटपुटस्ट्रीम' है। 'प्रिंटवाइटर' एक 'लेखक' है। –

7

जैसा कि टोफूबीर के उत्तर में कहा गया है, दोनों में उनकी विशेषताएं हैं। PrintWriter का पूरा फायदा (या किसी अन्य लेखक) लेने के लिए, लेकिन यह भी बफ़र लेखन का उपयोग आप की जरूरत एक इस तरह के साथ BufferedWriter लपेट कर सकते हैं:

PrintWriter writer = new PrintWriter(
         new BufferedWriter (
          new FileWriter("somFile.txt"))); 
+2

@Jons को याद करते हुए टिप्पणी करें कि PrintWriter अपवादों को निगल देगा। चेक एरर कहा जाना चाहिए। – MadMurf

+1

मुझे रॉयल टेनेनबाम्स – Ogen

+1

से कम से कम वर्तमान ओपनजेडीके 8 कार्यान्वयन (और शायद पुराने संस्करण) में, 'प्रिंटरवाइटर' पहले से ही 'बुफर्डवाइटर' बनाता है। – nimrodm

6

PrintWriter सिर्फ चरित्र मोड में किसी भी लेखक पर प्रिंट तरीकों को उजागर करता है।

BufferedWriter इसके buffered तरीकों के मुकाबले अधिक कुशल है। और यह टेक्स्ट सिस्टम फ़ाइलों को सही तरीके से हेरफेर करने के लिए, आपके सिस्टम प्लेटफ़ॉर्म के आधार पर, एक नई() विधि के साथ आता है।

BufferedReader पात्रों में परिवर्तित बाइट्स के साथ फ़ाइल से एक पाठ पढ़ने की अनुमति देता है। यह रेखा से लाइन पढ़ने की अनुमति देता है।

कोई प्रिंट रीडर नहीं है, आपको अपने इनपुट के प्रारूप के अनुसार एक और रीडर कार्यान्वयन चुनना होगा।

+0

चूंकि यह एक वर्ण धारा है जहां "बाइट्स" आता है ... – i2ijeya

-1

मुझे लगता है कि प्रिंटवाइटर का उपयोग करने का कारण पहले से ही ऊपर उल्लिखित है, लेकिन एक महत्वपूर्ण कारण यह है कि आप सीधे एक फ़ाइल ऑब्जेक्ट को प्रिंटवाइटर कन्स्ट्रक्टर को पास करते हैं जो इसे उपयोग करना आसान बनाता है।

File file=new File(“newfile.txt”); 
PrintWriter pw=new PrintWriter(file); 
1

सामान्य रूप से, एक लेखक अंतर्निहित चरित्र या बाइट स्ट्रीम पर तुरंत अपना आउटपुट भेजता है। जब तक तत्काल आउटपुट की आवश्यकता न हो, तब तक सलाह दी जाती है कि किसी भी लेखक के बारे में एक बुफर्डवाइटर लपेटें जिसका लेखन() संचालन महंगा हो सकता है, जैसे कि फाइल राइटर्स और आउटपुटस्ट्रीम राइटर्स। उदाहरण के लिए,

नोट: कोड ब्लॉकों में पाठ सामग्री स्वचालित रूप से शब्द-लिपटे

PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("foo.out")));

फाइल करने के लिए PrintWriter के उत्पादन बफ़र जाएगा। बफरिंग के बिना, प्रिंट() विधि के प्रत्येक आमंत्रण से अक्षरों को बाइट्स में परिवर्तित किया जाएगा जो तब फ़ाइल में तुरंत लिखा जाएगा, जो बहुत अक्षम हो सकता है।

0

BufferedWriter - एक आउटपुट कैरेक्टर स्ट्रीम में पाठ लिखता है, एक चरित्र धारा से वर्णों को बफर करता है। प्रिंटवाइटर - टेक्स्ट आउटपुट स्ट्रीम में ऑब्जेक्ट्स के प्रारूपित प्रस्तुति मुद्रित करता है।

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