जावा स्ट्रीम में फ्लश () का उद्देश्य क्या है?


121

जावा में, flush()धाराओं में विधि का उपयोग किया जाता है। लेकिन मुझे समझ नहीं आ रहा है कि इस पद्धति का उपयोग करने के सभी उद्देश्य क्या हैं?

fin.flush();

मुझे कुछ सुझाव बताओ।

जवाबों:


101

विधि के डॉक्स से flush:

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

बफ़रिंग मुख्य रूप से I / O प्रदर्शन को बेहतर बनाने के लिए किया जाता है। इस पर और अधिक इस लेख से पढ़ा जा सकता है: ट्यूनिंग जावा I / O प्रदर्शन


1
ट्यूनिंग जावा आई / ओ प्रदर्शन करने के लिए ताजा कड़ी oracle.com/technetwork/articles/javase/perftuning-137844.html
ऑलेक्ज़ेंडर

+1 धन्यवाद। मैं यह पता नहीं लगा सका कि मेरे बाइट्स को बाहर क्यों नहीं भेजा गया, और यह इसलिए है क्योंकि मुझे अपने बफ़र्स को फ्लश करना था।
रेयरेंग

3
क्या फ्लश विधि केवल बफ़र्ड धाराओं के साथ उपयोग की जाती है? क्या अन्य धाराओं (जैसे आउटपुटस्ट्रीम) के साथ भी इसका उपयोग करने का कोई फायदा है?
तनिषा

हो सकता है कि 'फ्लश' शब्द इसकी परिभाषा में न हो। नई चीजों को समझने के लिए पुनरावर्ती परिभाषाएं एक बुरा विचार हैं। मुझे पता है कि आपने परिभाषा नहीं लिखी है।
जोनाथन कोमार

27

जब हम कोई कमांड देते हैं, तो उस कमांड की स्ट्रीम हमारे कंप्यूटर में बफर (एक अस्थायी मेमोरी लोकेशन) नामक मेमोरी लोकेशन में स्टोर हो जाती है। जब सभी अस्थायी मेमोरी लोकेशन फुल हो जाता है तो हम फ्लश () का उपयोग करते हैं, जो डेटा की सभी धाराओं को फ्लश करता है और उन्हें पूरी तरह से निष्पादित करता है और बफर अस्थायी स्थान में नई धाराओं को एक नया स्थान देता है। -आप समझ जाएंगे


1
केवल के मामले में BufferedOutputStream, BufferedWriter, ObjectOutputStream,और PrintXXXवर्गों। flush()किसी अन्य धारा की विधि या Writerकुछ भी नहीं।
लोर्ने का मार्कीट

@EJP अपने बयानों को बैकअप करने के लिए कोई संदर्भ? यह हमारे लिए उपयोगी होगा newbies :)
mr5

1
@ mr5 यह पोस्टर है जिसे अपने बयानों का समर्थन करने की ज़रूरत है, मुझे नहीं, लेकिन मैंने जो कुछ भी कहा है, वह स्पष्ट रूप से जावदोक में स्पष्ट है
लोर्ने

जब तक आप लेखक हैं , तब तक flush()स्पष्ट रूप से आमंत्रित करना आवश्यक नहीं है । एक फ्लश को ही अंजाम देता है। BufferedWriterclose()close()
Yossarian42

नोट close()कॉल flush(), इसलिए FileWriterबिना बफर का उपयोग करते हुए कॉलिंग दोनों ही बेमानी है ।
Yossarian42

26

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

हमें यह सुनिश्चित करने की आवश्यकता है कि धारा को बंद करने से पहले हम सभी लेख पूरे कर लें, और इसीलिए flush()इसे फाइल / बफर लेखक में कहा जाता हैclose()

लेकिन अगर आपको कोई आवश्यकता है कि धारा बंद करने, उपयोग करने से पहले आपके सभी लेखन कभी भी सहेजे जाएं flush()


8
बंद करने से ठीक पहले फ्लश बुलाना निरर्थक है, है ना? यह बस पास बुला के रूप में ही है।
जॉन हेन्केल

2
@BimanTripathy मैं कह सकता हूँ कि 100% आश्वासन के साथ। यह FilterOutputStreamऔर के Javadoc द्वारा की गारंटी है FilterWriter
लोर्ने का मार्कीट

7

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

बफ़रडाइवर वर्ग में जो जावा लिबास में रखा गया है, एक पंक्ति है जैसे:

private static int defaultCharBufferSize = 8192;

यदि आप बफ़र पूर्ण होने से पहले डेटा भेजना चाहते हैं, तो आपके पास नियंत्रण है। जस्ट फ्लश इट। लेखक को कॉल करें। फ़्लश () कहते हैं, "जो कुछ भी बफर में भेजना है, अब!

संदर्भ पुस्तक: https://www.amazon.com/Head-First-Java-Kathy-Sierra/dp/0596009208

पेज: 453


4

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


5
यह कल्पना है। किसी भी जादुई धागे से धाराएं नहीं मिलती हैं; केवल उन लोगों द्वारा बनाई गई जो आवेदन द्वारा बनाई गई हैं।
लोर्ने

3

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


यह सच नहीं है। FileOutputStream.flush () एक खाली no-op है।
लंबू
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.