प्रोग्राम्समध्ये बर्‍याचदा फाईलमध्ये किंवा इतरत्र डेटा द्रुतपणे लिहिण्याची आवश्यकता असते. आणि हे प्रश्न निर्माण करते: आपण हे कसे करावे? आपण कोणता वर्ग निवडायचा? आज आपण या भूमिकेसाठी एक योग्य उमेदवार ओळखू - बफरड रायटर वर्ग.

आम्हाला BufferedWriter ची गरज का आहे?

BufferedWriter हा एक वर्ग आहे जो प्रवाहात बफर केलेले वर्ण लिहितो. हे तुम्हाला फिजिकल मीडियामध्ये प्रवेश करण्याच्या वेळा कमी करू देते. म्हणजेच, प्रत्येक वेळी एकच वर्ण लिहिण्याऐवजी, ते एका बफरवर डेटा लिहिते, आणि नंतर सर्व वर्ण एकाच वेळी माध्यमावर लिहिते.

यामुळे लेखनाचा वेग मोठ्या प्रमाणात वाढतो. डीफॉल्ट बफर आकार 8192 वर्ण आहे, परंतु कन्स्ट्रक्टरमध्ये नवीन आकार निर्दिष्ट करून हे बदलले जाऊ शकते:


BufferedWriter(Writer in, int sz)

येथे, कन्स्ट्रक्टरचा पहिला युक्तिवाद हा एक प्रवाह आहे जो आम्ही लिहित असलेला डेटा प्राप्त करेल. आणि असे दिसून आले की sz हा नवीन बफरचा आकार आहे.

Java मध्ये बफरेडरीडर क्लास देखील आहे: ते डेटाच्या बफर रीडिंगसाठी वापरले जाते.

बफर म्हणजे नक्की काय? वास्तविक जीवनाचे उदाहरण घेऊ. बफर हे सुपरमार्केटमधील बास्केट किंवा शॉपिंग कार्टसारखे असते. एकच वस्तू घेऊन चेकआउटपर्यंत चालत जाण्याऐवजी, त्यासाठी पैसे द्या, तुमच्या कारच्या ट्रंकमध्ये ठेवा आणि नंतर दुसर्‍या वस्तूसाठी परत येण्याऐवजी, आम्ही एक शॉपिंग कार्ट घेऊ शकतो, आम्हाला पाहिजे असलेले सर्वकाही त्यात ठेवू शकतो आणि नंतर पैसे देऊ शकतो. चेकआउटवर हे बफर कसे कार्य करते: ते डेटा गोळा करते आणि नंतर प्रत्येक भाग स्वतंत्रपणे लिहिण्याऐवजी सर्वकाही घेते आणि ते लिहिते.

BufferedWriter वर्गाचे कन्स्ट्रक्टर आणि पद्धती

आता BufferedWriter वर्ग जवळून पाहू . ऑब्जेक्ट तयार करण्यासाठी दोन कन्स्ट्रक्टर आहेत:


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

दोन्ही कन्स्ट्रक्टरमध्ये कुठे लिहिण्यासाठी प्रवाह आहे आणि sz , आधीच नमूद केल्याप्रमाणे, बफरचा आकार आहे.

BufferedWriter वर्गातही अनेक पद्धती आहेत. आज आम्ही त्यापैकी काही जवळून पाहू:

लिहा(char[] अॅरे) बफरवर चार अॅरे लिहितो
लिहा (स्ट्रिंग एस, इंट ऑफ, इंट लेन) बफरवर स्ट्रिंगचा भाग लिहितो
जोडणे(क) बफरला एक वर्ण लिहा
संलग्न करा (CharSequence csq, int start, int end) बफरवर अॅरेचा भाग लिहितो
नवीन ओळ() रेषा विभाजक लिहितो
फ्लश() प्रवाह फ्लश करते

चला एक प्रोग्राम लिहू जो फाईलला व्हॅल्यू लिहितो. साठीलेखकपॅरामीटर, आम्ही पास करूफाइलराइटरकन्स्ट्रक्टरला. हे मजकूर फायली लिहिण्यासाठी वापरले जाते आणि ऑब्जेक्ट्स आरंभ करण्यासाठी अनेक कन्स्ट्रक्टर आहेत:

फाइलराइटर(फाइल फाइल)
फाइलराइटर(फाइल फाइल, बुलियन अ‍ॅपेंड)
फाइलराइटर(फाइलडिस्क्रिप्टर एफडी)
फाइलराइटर(स्ट्रिंग फाइलनाव)
फाइलराइटर(स्ट्रिंग फाइलनाव, बुलियन अ‍ॅपेंड)

आमच्या उदाहरणासाठी, आम्ही एक कन्स्ट्रक्टर वापरू जे फाइलनाव घेते:


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 लिहिण्यासाठी write(String str) पद्धत वापरेल .

लिहिण्याच्या इतर पद्धती आहेत:

  • write(char[] array ) — हा प्रकार चार अॅरे स्वीकारतो आणि लिहितो ;

  • write(स्ट्रिंग s, int off, int len) — हा प्रकार एक स्ट्रिंग s घेतो ; ऑफसेट ऑफ , ज्यावरून लिहिणे सुरू करण्‍यासाठी वर्णाची अनुक्रमणिका आहे; आणि 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"))) 

याचा अर्थ क्लोज() पद्धत माय वर आपोआप कॉल केली जातेbufferedWriterऑब्जेक्ट, कारण ते ऑटोक्लोज करण्यायोग्य इंटरफेस लागू करते.

कोडमधील फ्लश() पद्धत आउटपुट प्रवाह फ्लश करण्यासाठी वापरली जाते, सर्व बफर केलेले बाइट्स लिहिण्यास भाग पाडतात . या कॉलशिवाय लेखन होऊ शकत नाही, कारण ते असे सूचित करते की बफर फ्लश करणे आवश्यक आहे आणि बफर केलेले बाइट्स लिहिणे आवश्यक आहे.

BufferedWriter वर्गात एक newLine() पद्धत देखील आहे जी आमच्या संदेशात नवीन ओळ जोडते:


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());
    }

फाइलमध्ये, आम्हाला मिळते:

हॅलो, अमिगो!
हा एक अतिशय महत्वाचा संदेश आहे!

append() पद्धतीची स्वाक्षरी अशी दिसते:


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());
}

हा कोड तुम्हाला देईल:

नमस्कार,

म्हणजेच, अ‍ॅपेंड पद्धतीसह , तुम्ही बफरमध्ये स्ट्रिंगचा कोणता भाग जोडायचा ते निर्दिष्ट करता.

write() आणि append() मधील फरक अधिक बारकाईने पाहिल्यास , आपण प्रथम पाहतो की ते दोघे तत्त्वतः समान गोष्ट करतात - ते मूल्ये लिहितात.

तथापि, फरक असा आहे की संलग्न पद्धत नवीन आहे आणि एक युक्तिवाद म्हणून CharSequence घेते , आणि कारण String CharSequence लागू करते , आम्ही Strings आणि StringBuilders आणि StringBuffers जोडण्याच्या पद्धतीमध्ये पास करू शकतो . पण write() पद्धत फक्त स्ट्रिंग स्वीकारेल .

आतासाठी एवढेच! आज आपण बफरशी परिचित झालो आहोत, फाईलमध्ये बफर केलेले लेखन कसे करावे, तसेच आपण हे करण्यासाठी कोणत्या पद्धती वापरू शकता.