जावा में, मैंने देखा कि कभी-कभी System.err
कथन System.out
कथन से पहले पहले मुद्रित हो जाते हैं, हालांकि बाद वाला मेरे कोड में पहले से पहले दिखाई देता है। क्यूं कर? मैं उत्सुक हूँ।सिस्टम.एर स्टेटमेंट कभी-कभी मुद्रित क्यों होते हैं?
उत्तर
आमतौर पर, System.out
एक buffered आउटपुट स्ट्रीम है, इसलिए गंतव्य स्थान पर फ़्लश होने से पहले पाठ जमा हो जाता है। यह उन अनुप्रयोगों में प्रदर्शन में नाटकीय रूप से सुधार कर सकता है जो बड़ी मात्रा में टेक्स्ट प्रिंट करते हैं, क्योंकि यह महंगे सिस्टम कॉल की संख्या को कम करता है। हालांकि, इसका मतलब है कि टेक्स्ट हमेशा प्रदर्शित नहीं होता है, और इसे लिखा जाने के बाद बाद में मुद्रित किया जा सकता है।
System.err
, दूसरी ओर, आमतौर पर buffered नहीं है क्योंकि त्रुटि संदेशों को तुरंत मुद्रित करने की आवश्यकता होती है। यह धीमा है, लेकिन अंतर्ज्ञान यह है कि त्रुटि संदेश समय-महत्वपूर्ण हो सकते हैं और इसलिए कार्यक्रम की मंदी को उचित ठहराया जा सकता है। the Javadoc for System.err
के अनुसार:
आमतौर पर यह धारा उत्पादन या मेजबान पर्यावरण या उपयोगकर्ता द्वारा निर्दिष्ट एक और उत्पादन गंतव्य प्रदर्शित करने के लिए मेल खाती है। सम्मेलन द्वारा, इस आउटपुट स्ट्रीम का उपयोग त्रुटि संदेशों या अन्य जानकारी को प्रदर्शित करने के लिए किया जाता है जो उपयोगकर्ता के तत्काल ध्यान में आना चाहिए, भले ही मूल आउटपुट स्ट्रीम, चर के बाहर का मूल्य, किसी फ़ाइल या अन्य गंतव्य पर रीडायरेक्ट किया गया हो आमतौर पर इसकी निगरानी नहीं की जाती है।
(मेरे जोर)
हालांकि, एक परिणाम के रूप में, System.out
के लिए भेजा पुराने डेटा को नए System.err
संदेशों के बाद दिखाए जाएं, वर्ष बफ़र डेटा बाद में प्लावित है के बाद से से संदेश System.err
भेज दिया गया। उदाहरण के लिए घटनाओं के इस क्रम:
- "हैलो,"
System.out
- "पैनिक" करने के लिए बफ़र है
System.err
के लिए सीधे भेजा जाता है और तुरंत छपा है। - "दुनिया!"
System.out
को बफ़र है, और बफ़र डेटा छपा है
उत्पादन
PANIC
Hello, world!
हालांकि Hello
PANIC
से पहले System.out
को छपा था System.err
को मुद्रित किया गया था में परिणाम होगा।
आशा है कि इससे मदद मिलती है!
बस जिज्ञासा से बाहर: जावा सी wrt stdout के रूप में ही की गारंटी देता है, जब एक टर्मिनल के लिए पहुंचाया बनाने करता है? अर्थात। जब भी कोई नई लाइन लिखी जाती है तो हम बफर को फ्लश करते हैं? – Voo
@ Voo- मैं सिर्फ जावाडोक को देखा और वहाँ इस तरह के कुछ भी दिखाई नहीं देता। – templatetypedef
'PrintStream' बस सब कुछ के बारे में के बाद फ्लश करने के लिए लागू किया गया है (मुझे लगता है कि आप सीधे' write' कर सकते हैं और यह नहीं है)। –
इसे बफरिंग और प्राथमिकता के साथ करना है। संभवतः, जावा (जैसे सी और सी-डेरिवेटिव्स) System.err
, stderr
इत्यादि बफर नहीं करते हैं, System.out
, stdout
आदि के विपरीत, इस तरह, सिस्टम यह सुनिश्चित कर सकता है कि आपको किसी भी प्रासंगिक त्रुटि संदेश मिलेगा, भले ही यह एक कारण या अन्य के लिए मानक आउटपुट ड्रॉप करना है।
Wikipedia से:
यह स्वीकार्य और सामान्य के लिए मानक आउटपुट और मानक त्रुटि है ऐसे पाठ टर्मिनल के रूप में एक ही गंतव्य के लिए निर्देशित किया है,।संदेश उसी क्रम में दिखाई देते हैं क्योंकि प्रोग्राम उन्हें लिखता है, जब तक बफरिंग शामिल न हो। (उदाहरण के लिए, एक सामान्य स्थिति है जब मानक त्रुटि धारा unbuffered है, लेकिन मानक आउटपुट धारा लाइन बफ़र है, इस मामले में, पाठ मानक त्रुटि के लिए लिखा बाद में, टर्मिनल पहले पर प्रकट हो सकता है, तो मानक आउटपुट स्ट्रीम का बफर नहीं है अभी तक भरा है।)
मुझे लगता है कि काम धाराओं के लिए कभी नहीं किसी भी प्राथमिकताओं में से दिल है .. कैसे करेंगे? मैं सरल बफरिंग स्पष्टीकरण के साथ जाऊंगा। – Voo
बस एक फूलदार भाषा की समस्या है। अधिक तकनीकी होने के लिए फिक्स्ड :) –
- 1. ड्रॉइंग फ़ोल्डर में नाम क्यों नहीं रख सकते हैं विशेष वर्ण होते हैं या पूंजी पत्र से शुरू होते हैं?
- 2. इन टैग्स से कभी-कभी जावास्क्रिप्ट क्यों घिरे होते हैं?
- 3. = ~ ऑपरेटर को कभी-कभी दुष्प्रभाव क्यों होते हैं?
- 4. आईओएस एनिमेशन पहली बार धीमे क्यों धीमे होते हैं?
- 5. मूल्य प्रकार सिस्टम से प्राप्त होते हैं। ऑब्जेक्ट ... क्यों?
- 6. AsObservable और AsNumerable अलग-अलग क्यों लागू होते हैं?
- 7. SQL सर्वर स्केलर-मूल्यवान फ़ंक्शंस धीमे क्यों होते हैं?
- 8. प्रबंधित बीन्स टोमकैट में क्यों लोड नहीं होते हैं?
- 9. मेरे मोंगोसजेएस ऑब्जेक्ट्सड्स समानता परीक्षण में विफल क्यों होते हैं?
- 10. मिनीकेरेन नाम हमेशा 'ओ` के साथ क्यों समाप्त होते हैं?
- 11. स्ट्रिंग्स जावा में "" से क्यों शुरू होते हैं?
- 12. मेरे हैंश स्ट्रिंग के रूप में मुद्रित क्यों हैं?
- 13. उद्धरण के अंदर स्थिरांक मुद्रित नहीं हैं?
- 14. डेमॉन धागे कब उपयोगी होते हैं?
- 15. ट्रेस और डीबग स्टेटमेंट
- 16. पायथन: कुछ पैकेज अंडे के रूप में क्यों स्थापित होते हैं और कुछ "अंडा फ़ोल्डर्स" के रूप में क्यों स्थापित होते हैं?
- 17. क्यों कुछ रिपॉजिटरी यूआरएल .git में समाप्त होते हैं जबकि अन्य नहीं करते हैं?
- 18. कुछ Django ORM प्रश्न "हत्या" संदेश के साथ अचानक क्यों समाप्त होते हैं?
- 19. श्वार्टज़ियन परिवर्तन कब उपयोगी होते हैं?
- 20. रेल_फिल्टर से पहले कैसे लागू होते हैं?
- 21. क्लोजर के प्रोटोकॉल प्रभावित होते हैं?
- 22. डीएओ पैटर्न - लेनदेन कहां फिट होते हैं?
- 23. डेटा बाइंडिंग कब लागू होते हैं?
- 24. पैकेज ऑब्जेक्ट्स कब शुरू होते हैं?
- 25. काउंटर हर बार शुरू होते हैं?
- 26. क्या रैवल हमेशा स्थिर होते हैं?
- 27. memory_order_seq_cst और memory_order_acq_rel कैसे भिन्न होते हैं?
- 28. क्या .NET फ़ाइनलाइज़र हमेशा निष्पादित होते हैं?
- 29. टेस्ट सफल होते हैं, फिर भी ट्रेसबैक
- 30. @InjectView फ़ील्ड इंजेक्शन कब होते हैं?
1,02 से मैं 'का उपयोग कर System.err' जब मैं वास्तव में इसी कारण के बारे में हैकिंग कर रहा हूँ के साथ फंस गए हैं। पता नहीं जावा के हाल के संस्करण कैसे व्यवहार करते हैं, क्योंकि मैं इसका परीक्षण नहीं करता हूं। –