प्रोग्राम में अक्सर फ़ाइल या अन्य जगहों पर डेटा को जल्दी से लिखने की आवश्यकता शामिल होती है। और यह प्रश्न उठाता है: हमें यह कैसे करना चाहिए? हमें कौन सा वर्ग चुनना चाहिए? आज हम इस भूमिका के लिए एक उपयुक्त उम्मीदवार के बारे में जानेंगे - बफ़रेडराइटर वर्ग।

हमें बफ़रेडराइटर की आवश्यकता क्यों है?

BufferedWriter एक वर्ग है जो बफ़र किए गए वर्णों को एक धारा में लिखता है। यह आपको भौतिक मीडिया तक पहुंचने की संख्या को कम करने देता है। यानी हर बार एक ही अक्षर लिखने के बजाय, यह एक बफर को डेटा लिखता है, और फिर सभी पात्रों को एक ही बार में माध्यम में लिखता है।

इससे लिखने की गति बहुत बढ़ जाती है। डिफ़ॉल्ट बफर आकार 8192 वर्ण है, लेकिन इसे कन्स्ट्रक्टर में एक नया आकार निर्दिष्ट करके बदला जा सकता है:

BufferedWriter(Writer in, int sz)

यहां, कंस्ट्रक्टर का पहला तर्क एक स्ट्रीम है जो हमारे द्वारा लिखे गए डेटा को प्राप्त करेगा। और यह पता चला है कि sz नए बफ़र का आकार है।

Java में एक BufferedReader क्लास भी है: इसका उपयोग डेटा के बफर्ड रीडिंग के लिए किया जाता है।

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

BufferedWriter वर्ग के निर्माता और तरीके

आइए अब BufferedWriter क्लास पर करीब से नज़र डालें। ऑब्जेक्ट बनाने के लिए दो कंस्ट्रक्टर हैं:

public BufferedWriter(Writer out)
public BufferedWriter(Writer out, int sz)

जहाँ out दोनों कंस्ट्रक्टर्स में लिखने के लिए स्ट्रीम है, और sz , जैसा कि पहले ही उल्लेख किया गया है, बफर का आकार है।

BufferedWriter वर्ग के भी कई तरीके हैं। आज हम उनमें से कुछ पर करीब से नज़र डालेंगे:

लिखें (चार [] सरणी) बफर को एक चार सरणी लिखता है
लिखें (स्ट्रिंग एस, इंट ऑफ, इंट लेन) बफ़र को एक स्ट्रिंग का हिस्सा लिखता है
संलग्न करें (चार सी) बफर को एक चरित्र लिखें
संलग्न करें (CharSequence csq, int start, int end) बफर के लिए एक सरणी का हिस्सा लिखता है
नई पंक्ति() एक रेखा विभाजक लिखता है
फ्लश () धारा प्रवाहित करती है

चलिए एक प्रोग्राम लिखते हैं जो एक फ़ाइल के लिए मान लिखेगा। के लिएलेखकपैरामीटर, हम एक पास करेंगेFileWriterनिर्माणकर्ता को। इसका उपयोग पाठ फ़ाइलों को लिखने के लिए किया जाता है और वस्तुओं को इनिशियलाइज़ करने के लिए कई कंस्ट्रक्टर होते हैं:

FileWriter (फ़ाइल फ़ाइल)
FileWriter (फ़ाइल फ़ाइल, बूलियन संलग्न)
FileWriter (FileDescriptor fd)
FileWriter (स्ट्रिंग फ़ाइल नाम)
FileWriter (स्ट्रिंग फ़ाइल नाम, बूलियन संलग्न)

हमारे उदाहरण के लिए, हम एक कंस्ट्रक्टर का उपयोग करेंगे जो एक फ़ाइल नाम लेता है:

try(BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("file.txt"))){

	String message = "Hello, Amigo! This is a very important message!";
	bufferedWriter.write(message);
	bufferedWritter.flush();
}
catch(IOException ex){
System.out.println(ex.getMessage());
 }

हमारा कोड file.txt फ़ाइल में str लिखने के लिए राइट (स्ट्रिंग स्ट्र) विधि का उपयोग करेगा।

लिखने के अन्य तरीके हैं:

  • लिखें (चार [] सरणी ) - यह संस्करण चार सरणी को स्वीकार करता है और लिखता है;

  • लिखें (स्ट्रिंग एस, इंट ऑफ, इंट लेन) - यह संस्करण एक स्ट्रिंग एस लेता है ; एक ऑफ़सेट ऑफ़ , जो उस वर्ण का सूचकांक है जिससे लिखना शुरू करना है; और len , जो लिखी जाने वाली स्ट्रिंग (सबस्ट्रिंग) की लंबाई है।

try(BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("file.txt"))){
	String message = "Hello, Amigo! This is a very important message!";
	bufferedWriter.write(message, 0, 11);
 	bufferedWriter.flush();

} catch(IOException ex) {
System.out.println(ex.getMessage());
}

यह कोड फ़ाइल में "हैलो, एमिग" लिखेगा, क्योंकि हमने इंडेक्स 0 से शुरू होने वाले 11 अक्षरों को लिखने की विधि बताई थी।

हमारे कोड में एक ट्राइ-विथ रिसोर्स ब्लॉक भी है:

try(BufferedWriter bufferedWritter = new BufferedWriter(new FileWriter("file.txt")))

इसका मतलब यह है कि मेरे पर करीब () विधि स्वचालित रूप से कॉल की जाती हैबफ़र्डराइटरऑब्जेक्ट, क्योंकि यह AutoCloseable इंटरफ़ेस को लागू करता है।

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

BufferedWriter वर्ग में एक नई लाइन () विधि भी है जो हमारे संदेश में एक नई पंक्ति जोड़ती है :

try (BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("file.txt"))) {
        String message = "Hello, Amigo! This is a very important message!";
        bufferedWriter.write(message, 0, 13);
        bufferedWriter.newLine();
        bufferedWriter.write(message, 15, 33);
    } catch (IOException ex) {
        System.out.println(ex.getMessage());
    }

फ़ाइल में, हमें मिलता है:

हैलो, अमीगो!
यह एक बहुत ही महत्वपूर्ण संदेश है!

परिशिष्ट () विधि का हस्ताक्षर इस तरह दिखता है:

public Writer append(CharSequence csq, int start, int end)

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

try (BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("file.txt"))) {
    String message = "Hello, Amigo! This is a very important message!";
    bufferedWriter.append(message, 0, 7);
    bufferedWriter.flush();
} catch (IOException ex) {
    System.out.println(ex.getMessage());
}

यह कोड आपको देगा:

नमस्ते,

यही है, एपेंड विधि के साथ , आप निर्दिष्ट करते हैं कि बफर में जोड़ने के लिए स्ट्रिंग का कौन सा हिस्सा है।

राइट () और एपेंड () के बीच के अंतर को करीब से देखते हुए , हम पहले देखते हैं कि वे दोनों सिद्धांत रूप में एक ही काम करते हैं - वे मान लिखते हैं।

हालाँकि, अंतर यह है कि एपेंड मेथड नया है और एक तर्क के रूप में एक CharSequence लेता है , और क्योंकि String CharSequence को लागू करता है , हम स्ट्रिंग्स और StringBuilders और StringBuffers को एपेंड विधि में पास कर सकते हैं। लेकिन लिखें() विधि केवल एक स्ट्रिंग स्वीकार करेगी ।

अभी के लिए बस इतना ही! आज हम बफ़र्स से परिचित हो गए हैं, किसी फ़ाइल में बफ़र्ड लेखन कैसे करें, साथ ही यह करने के लिए आप जिन तरीकों का उपयोग कर सकते हैं।