यह फ्लिपेंट लग सकता है, लेकिन PrintStream
प्रिंट OutputStream
पर प्रिंट करता है, और PrintWriter
प्रिंट Writer
पर प्रिंट करता है। ठीक है, मुझे संदेह है कि मुझे स्पष्ट बताते हुए कोई अंक मिलेगा। लेकिन और भी है।
तो, OutputStream
और Writer
के बीच क्या अंतर है? दोनों धाराएं हैं, प्राथमिक अंतर OutputStream
बाइट्स की एक धारा है जबकि लेखक एक वर्ण की धारा है।
यदि OutputStream
बाइट्स से संबंधित है, तो PrintStream.print(String)
के बारे में क्या? यह डिफ़ॉल्ट प्लेटफॉर्म एन्कोडिंग का उपयोग करके वर्णों को बाइट्स में परिवर्तित करता है। डिफ़ॉल्ट एन्कोडिंग का उपयोग करना आम तौर पर एक बुरी चीज है क्योंकि यह एक मंच से दूसरे प्लेटफॉर्म पर जाने पर बग का कारण बन सकता है, खासकर यदि आप एक मंच पर फ़ाइल उत्पन्न कर रहे हैं और इसे दूसरे पर ले रहे हैं।
Writer
के साथ, आप आमतौर पर किसी प्लेटफॉर्म निर्भरताओं से परहेज करते हुए उपयोग करने के लिए एन्कोडिंग निर्दिष्ट करते हैं।
जेडीके में PrintStream
क्यों परेशान है, क्योंकि प्राथमिक उद्देश्य वर्ण लिखना है, और बाइट नहीं है? PrintStream
जेडीके 1.1 की भविष्यवाणी करता है जब पाठक/लेखक चरित्र धाराएं पेश की गईं। मुझे लगता है कि सूर्य PrintStream
को हटा दिया होगा अगर केवल तथ्य के लिए यह व्यापक रूप से उपयोग किया जाता है। (सब के बाद, आप नहीं System.out
की प्रत्येक कॉल एक बहिष्कृत API चेतावनी उत्पन्न करने के लिए चाहते हो जाएगा! इसके अलावा, मानक आउटपुट स्ट्रीम मौजूदा अनुप्रयोगों भंग हो जाए पर PrintWriter
को PrintStream
से प्रकार बदलने।)
+1 अच्छा सवाल, मैं इन दो वर्गों को भी मिलाता हूं, और एपीआई दस्तावेज़ बहुत मदद नहीं करता है। – helpermethod
एक और अंतर यह है कि ऑटोफ्लश कैसे काम करता है। एक लेखक के लिए आउटपुट में एक \ n चरित्र की मौजूदगी फ्लश() को ट्रिगर करती है। लेकिन एक बाइट स्ट्रीम (प्रिंटस्ट्रीम) में केवल बाइट्स हैं। ऑटोफ्लश तब जवाडोक में वर्णित है, इस पर आधारित है: "प्लेटफार्म की न्यूलाइन कैरेक्टर की बजाय लाइन विभाजक की अपनी धारणा"। – mins