जवाबों:
विधि के डॉक्स से flush
:
आउटपुट स्ट्रीम को फ्लश करता है और किसी भी बफर आउटपुट बाइट को लिखने के लिए बाध्य करता है। फ्लश का सामान्य अनुबंध यह है कि इसे कॉल करना एक संकेत है कि, अगर पहले से लिखी गई कोई बाइट आउटपुट स्ट्रीम के कार्यान्वयन से बफ़र हो गई है, तो ऐसे बाइट्स को तुरंत अपने इच्छित गंतव्य पर लिखा जाना चाहिए।
बफ़रिंग मुख्य रूप से I / O प्रदर्शन को बेहतर बनाने के लिए किया जाता है। इस पर और अधिक इस लेख से पढ़ा जा सकता है: ट्यूनिंग जावा I / O प्रदर्शन ।
जब हम कोई कमांड देते हैं, तो उस कमांड की स्ट्रीम हमारे कंप्यूटर में बफर (एक अस्थायी मेमोरी लोकेशन) नामक मेमोरी लोकेशन में स्टोर हो जाती है। जब सभी अस्थायी मेमोरी लोकेशन फुल हो जाता है तो हम फ्लश () का उपयोग करते हैं, जो डेटा की सभी धाराओं को फ्लश करता है और उन्हें पूरी तरह से निष्पादित करता है और बफर अस्थायी स्थान में नई धाराओं को एक नया स्थान देता है। -आप समझ जाएंगे
BufferedOutputStream
, BufferedWriter
, ObjectOutputStream,
और PrintXXX
वर्गों। flush()
किसी अन्य धारा की विधि या Writer
कुछ भी नहीं।
flush()
स्पष्ट रूप से आमंत्रित करना आवश्यक नहीं है । एक फ्लश को ही अंजाम देता है। BufferedWriter
close()
close()
close()
कॉल flush()
, इसलिए FileWriter
बिना बफर का उपयोग करते हुए कॉलिंग दोनों ही बेमानी है ।
जब आप किसी स्ट्रीम में डेटा लिखते हैं, तो यह तुरंत नहीं लिखा जाता है, और यह बफर हो जाता है। इसलिए उपयोग करें flush()
जब आपको यह सुनिश्चित करने की आवश्यकता है कि बफर से आपका सारा डेटा लिखा गया है।
हमें यह सुनिश्चित करने की आवश्यकता है कि धारा को बंद करने से पहले हम सभी लेख पूरे कर लें, और इसीलिए flush()
इसे फाइल / बफर लेखक में कहा जाता हैclose()
।
लेकिन अगर आपको कोई आवश्यकता है कि धारा बंद करने, उपयोग करने से पहले आपके सभी लेखन कभी भी सहेजे जाएं flush()
।
FilterOutputStream
और के Javadoc द्वारा की गारंटी है FilterWriter
।
यदि बफ़र भरा है, तो उस पर बफ़र किए गए सभी तार डिस्क पर सहेजे जाएंगे। बफ़र्स का इस्तेमाल बिग डील्स से बचने के लिए किया जाता है! और ओवरहेड।
बफ़रडाइवर वर्ग में जो जावा लिबास में रखा गया है, एक पंक्ति है जैसे:
private static int defaultCharBufferSize = 8192;
यदि आप बफ़र पूर्ण होने से पहले डेटा भेजना चाहते हैं, तो आपके पास नियंत्रण है। जस्ट फ्लश इट। लेखक को कॉल करें। फ़्लश () कहते हैं, "जो कुछ भी बफर में भेजना है, अब!
संदर्भ पुस्तक: https://www.amazon.com/Head-First-Java-Kathy-Sierra/dp/0596009208
पेज: 453
स्ट्रीम अक्सर थ्रेड्स द्वारा एक्सेस की जाती हैं जो समय-समय पर अपनी सामग्री को खाली करती हैं और उदाहरण के लिए, इसे स्क्रीन पर प्रदर्शित करती हैं, इसे सॉकेट पर भेजती हैं या इसे एक फ़ाइल पर लिखती हैं। यह प्रदर्शन कारणों से किया जाता है। आउटपुट स्ट्रीम को फ्लश करने का मतलब है कि आप रोकना चाहते हैं, स्ट्रीम की सामग्री को पूरी तरह से अपने गंतव्य पर स्थानांतरित करने के लिए प्रतीक्षा करें, और फिर स्ट्रीम खाली और भेजे गए सामग्री के साथ निष्पादन को फिर से शुरू करें।
प्रदर्शन के मुद्दे के लिए, पहला डेटा बफ़र में लिखा जाना है। जब बफर फुल हो जाता है तो डेटा आउटपुट (फाइल, कंसोल आदि) को लिखा जाता है। जब बफर आंशिक रूप से भरा होता है और आप इसे आउटपुट (फाइल, कंसोल) पर भेजना चाहते हैं, तो आपको आउटपुट (फाइल, कंसोल) को आंशिक रूप से भरे हुए बफर को लिखने के लिए मैन्युअल रूप से फ्लश () विधि को कॉल करना होगा।