2010-02-26 11 views
76

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

fin.flush(); 

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

उत्तर

65
flush विधि के docs से

:

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

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

+1

ताजा कड़ी http://www.oracle.com/technetwork/articles/javase/perftuning-137844.html – Oleksandr

+0

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

+1

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

3

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

+1

यह कल्पना है। धाराओं को किसी जादुई धागे से नहीं पहुंचाया जाता है; केवल आवेदन द्वारा बनाए गए हैं। – EJP

14

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

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

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

+2

बंद होने से ठीक पहले फ्लश कॉल करना अनावश्यक है, है ना? यह बस बंद करने के समान ही है। –

+2

@ बिमानट्रिपथी मैं कह सकता हूं कि 100% आश्वासन के साथ। यह 'फ़िल्टरऑटपुटस्ट्रीम' और 'फ़िल्टरवाइटर' के जावाडोक द्वारा गारंटीकृत है। – EJP

+0

हां, बंद होने से पहले फ्लश को कॉल करना अनावश्यक है। –

20

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

+0

केवल 'बुफर्डऑटपुटस्ट्रीम', 'बुफर्डवाइटर', 'ऑब्जेक्टऑटपुटस्ट्रीम,' और 'प्रिंट XXX' कक्षाओं के मामले में। किसी भी अन्य धारा या 'लेखक' की 'फ्लश()' विधि कुछ भी नहीं करती है। – EJP

+0

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

+1

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

2

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

3

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

private static int defaultCharBufferSize = 8192; 

आप डेटा भेजने के लिए करने से पहले बफर भरा है चाहते हैं, तो आप नियंत्रण की क्या ज़रूरत है:

BufferedWriter कक्षा में है कि जावा libs में रखा गया है, वहाँ एक एक पंक्ति की तरह है। बस इसे फ्लश करें। लेखक को कॉल करें। फ्लश() कहते हैं, "जो कुछ भी बफर में भेजता है, अब!

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

पृष्ठों: ट्यूनिंग जावा आई/ओ प्रदर्शन करने के लिए 453

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