जावा इस क्षेत्र में कुछ भी नहीं करता है। यह पाइप बनाने के लिए ओएस सेवाओं का उपयोग करता है।
ओएस और विंडोज जैसे सभी यूनिक्स इस संबंध में समान व्यवहार करते हैं: 4K के साथ एक पाइप माता-पिता और बच्चे के बीच बनाई जाती है। जब वह पाइप भर जाती है (क्योंकि एक तरफ पढ़ नहीं रहा है), लेखन प्रक्रिया ब्लॉक।
यह पाइप की शुरुआत के बाद से मानक है। ज्यादा जावा नहीं कर सकता है।
आप क्या तर्क दे सकते हैं कि जावा में प्रक्रिया एपीआई बेकार है और इसमें अच्छे डिफ़ॉल्ट नहीं हैं जैसे बाल धाराओं को केवल उसी स्टडीन/स्टडआउट से माता-पिता के रूप में कनेक्ट करना, जब तक कि डेवलपर उन्हें कुछ विशिष्ट के साथ ओवरराइड न करे।
मुझे लगता है कि वर्तमान API के दो कारण हैं। सबसे पहले, जावा डेवलपर्स (यानी सूर्य/ओरेकल के लोग) जानते हैं कि प्रक्रिया एपीआई कैसे काम करती है और आपको क्या करना है। वे इतना जानते हैं कि ऐसा नहीं हुआ कि एपीआई भ्रमित हो सकता है।
दूसरा कारण यह है कि बहुमत के लिए काम करने वाला कोई अच्छा डिफ़ॉल्ट नहीं है। आप वास्तव में माता-पिता और बच्चे के stdin कनेक्ट नहीं कर सकते हैं; यदि आप कंसोल पर कुछ टाइप करते हैं, तो इनपुट को किस प्रक्रिया में जाना चाहिए?
इसी प्रकार, यदि आप स्टडआउट कनेक्ट करते हैं, तो आउटपुट कहीं भी जाएगा। यदि आपके पास कोई वेब ऐप है, तो कोई कंसोल नहीं हो सकता है या आउटपुट कहीं कहीं जा सकता है जहां कोई भी इसकी अपेक्षा नहीं करेगा।
पाइप भरने पर आप अपवाद भी नहीं फेंक सकते हैं क्योंकि सामान्य ऑपरेशन के दौरान भी हो सकता है।
स्रोत
2013-06-07 11:58:48
और क्या किया जाना चाहिए? क्या धाराओं को आसानी से अनदेखा किया जाना चाहिए? इस तरह कॉलर को धाराओं को पढ़ने के लिए मजबूर किया जाता है। –
@UwePlonus की तरह कहा; यदि आप वास्तव में उन सभी को अनदेखा करना चाहते हैं, तो बस किसी प्रकार का 'देवनुल {इनपुट, आउटपुट} स्ट्रीम' या कुछ बनाएं (JVM भी पहले से ही हो सकता है, मुझे नहीं पता) – fge
बीटीडब्लू, ठीक वही बात होगी यूनिक्स कमांड लाइन यदि आप std {out, err} को किसी नामित पाइप पर रीडायरेक्ट करते हैं और इससे नहीं पढ़ते हैं। – fge