Java: PrintStream to String?


115

मेरे पास एक फ़ंक्शन है जो एक निश्चित प्रकार की एक वस्तु लेता है, और PrintStreamजिस पर प्रिंट करना है, और उस ऑब्जेक्ट का प्रतिनिधित्व आउटपुट करता है। मैं स्ट्रिंग में इस फ़ंक्शन के आउटपुट को कैसे पकड़ सकता हूं? विशेष रूप से, मैं इसे एक toStringविधि के रूप में उपयोग करना चाहता हूं ।

जवाबों:


193

ByteArrayOutputStreamएक बफर के रूप में उपयोग करें :

import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.nio.charset.StandardCharsets;

    final ByteArrayOutputStream baos = new ByteArrayOutputStream();
    final String utf8 = StandardCharsets.UTF_8.name();
    try (PrintStream ps = new PrintStream(baos, true, utf8)) {
        yourFunction(object, ps);
    }
    String data = baos.toString(utf8);

10
सभी संसाधनों को मुक्त करने के लिए PrintStream को बंद करना न भूलें।
तबर

9
मैं PrintStream ps = new PrintStream(baos,true,"utf-8");चारसेट से बचने के लिए उपयोग करने का सुझाव
दूंगा

5
1.7 केnew String(baos.toByteArray(), java.nio.charset.StandardCharsets.UTF_8); बाद से उपलब्ध का उपयोग करें , यह फेंक नहीं है
ईयरकैम

2
@tobr निश्चित रूप से अंगूठे का एक अच्छा नियम है, लेकिन ByteArrayOutputStream.close()" इसका कोई प्रभाव नहीं है ", क्योंकि बैकिंग सरणी के अलावा मुक्त करने के लिए कोई संसाधन नहीं हैं, जो कचरा कलेक्टर द्वारा निपटा जाएगा।
dimo414

ByteArrayOutputStreamहै toString(String charsetName), लेकिन केवल स्ट्रिंग तर्क स्वीकार करते हैं। यह भी ध्यान रखें कि ByteArrayOutputStream है सिंक्रनाइज़ , जो शायद वांछनीय नहीं है
घबराओ मत

31

आप एक बाइट के साथ एक PrintStream का निर्माण कर सकते हैं। TheOrrayOutputStream कंस्ट्रक्टर में पास किया गया है जिसे आप बाद में PrintStream में लिखे गए टेक्स्ट को हथियाने के लिए उपयोग कर सकते हैं।

ByteArrayOutputStream os = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(os);
...
String output = os.toString("UTF8");

5

पिछले उत्तरों का एक एकीकरण, यह उत्तर जावा 1.7 और उसके बाद काम करता है। इसके अलावा, मैंने धाराओं को बंद करने के लिए कोड जोड़ा।

final Charset charset = StandardCharsets.UTF_8;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos, true, charset.name());
yourFunction(object, ps);
String content = new String(baos.toByteArray(), charset);
ps.close();
baos.close();


-3

इनर नाम के एक स्कैनर चर को परिभाषित और आरंभ करें जो स्ट्रिंग चर myStrLine का उपयोग करके एक इनपुट स्ट्रिंग स्ट्रीम बनाता है।

Ans: स्कैनर inSS = नया स्कैनर (myStrLine);

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.