स्ट्रीम ( InputStreamऔर OutputStream) बाइनरी डेटा ट्रांसफर करते हैं। यदि आप एक स्ट्रीम को एक स्ट्रिंग लिखना चाहते हैं, तो आपको पहले इसे बाइट्स में बदलना होगा , या दूसरे शब्दों में इसे एनकोड करना होगा। आप String.getBytes(Charset)विधि का उपयोग करके मैन्युअल रूप से (जैसा कि आप सुझाव देते हैं) कर सकते हैं , लेकिन आपको String.getBytes()विधि से बचना चाहिए , क्योंकि यह जेवीएम के डिफ़ॉल्ट एन्कोडिंग का उपयोग करता है, जिसे पोर्टेबल तरीके से विश्वसनीय रूप से भविष्यवाणी नहीं की जा सकती है।
किसी स्ट्रीम में वर्ण डेटा लिखने का सामान्य तरीका, हालाँकि, स्ट्रीम को Writer((अक्सर PrintWriter) ए में लपेटना है , जो आपके write(String)(या print(String)) विधि को कॉल करने पर आपके लिए रूपांतरण करता है । InputStreams के लिए संबंधित आवरण एक रीडर है ।
PrintStreamOutputStreamइस अर्थ में एक विशेष कार्यान्वयन है कि इसमें ऐसे तरीके भी शामिल हैं जो स्वचालित रूप से स्ट्रिंग्स को एन्कोड करते हैं (यह आंतरिक रूप से एक लेखक का उपयोग करता है)। लेकिन यह अभी भी एक धारा है। आप किसी लेखक के साथ अपनी धारा को सुरक्षित रूप से लपेट सकते हैं, भले ही वह एक PrintStreamया कुछ अन्य स्ट्रीम कार्यान्वयन हो। दोहरी एन्कोडिंग का कोई खतरा नहीं है।
आउटपुटस्ट्र्रीम के साथ PrintWriter का उदाहरण:
try (PrintWriter p = new PrintWriter(new FileOutputStream("output-text.txt", true))) {
p.println("Hello");
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}