java - एक स्ट्रिंग में आउटपुटस्ट्रीम प्राप्त करें




string io (4)

आप ByteArrayOutputStream उपयोग क्यों नहीं करते? इस उद्देश्य के लिए आपको यही उपयोग करना चाहिए।

जावा में एक स्ट्रिंग में java.io.OutputStream से आउटपुट को पाइप करने का सबसे अच्छा तरीका क्या है?

कहो मेरे पास विधि है:

  writeToStream(Object o, OutputStream out)

जो ऑब्जेक्ट से दिए गए स्ट्रीम में कुछ डेटा लिखता है। हालांकि, मैं इस आउटपुट को स्ट्रिंग में यथासंभव आसानी से प्राप्त करना चाहता हूं।

मैं इस तरह की कक्षा लिखने पर विचार कर रहा हूं (अवांछित):

class StringOutputStream extends OutputStream {

  StringBuilder mBuf;

  public void write(int byte) throws IOException {
    mBuf.append((char) byte);
  }

  public String getString() {
    return mBuf.toString();
  }
}

लेकिन क्या कोई बेहतर तरीका है? मैं केवल एक परीक्षण चलाने के लिए चाहता हूँ!


मुझे अपाचे कॉमन्स आईओ लाइब्रेरी पसंद है। ByteArrayOutputStream अपने संस्करण पर एक नज़र डालें, जिसमें एक toString(String enc) विधि के साथ-साथ toByteArray() । कॉमन्स प्रोजेक्ट जैसे मौजूदा और भरोसेमंद घटकों का उपयोग करने से आपका कोड छोटा और आसान और पुनर्वितरण आसान हो सकता है। सौभाग्य।


यह अच्छी तरह से काम किया

    OutputStream output = new OutputStream()
    {
        private StringBuilder string = new StringBuilder();
        @Override
        public void write(int b) throws IOException {
            this.string.append((char) b );
        }

        //Netbeans IDE automatically overrides this toString()
        public String toString(){
            return this.string.toString();
        }
    };

विधि कॉल = >> marshaller.marshal( (Object) toWrite , (OutputStream) output);

फिर स्ट्रिंग को मुद्रित करने के लिए या इसे केवल "आउटपुट" स्ट्रीम का संदर्भ लें, उदाहरण के लिए, कंसोल = >> System.out.println(output); स्ट्रिंग को मुद्रित करने के लिए System.out.println(output);

marshaller.marshal(Object,Outputstream) : मेरी विधि कॉल marshaller.marshal(Object,Outputstream) xml के साथ काम करने के लिए है। यह इस विषय के लिए अप्रासंगिक है।

यह उत्पादन के उपयोग के लिए बेहद अपर्याप्त है, कई रूपांतरणों के लिए रास्ता है और यह थोड़ा ढीला है। यह आपको साबित करने के लिए कोड किया गया था कि एक कस्टम OuputStream बनाने और एक स्ट्रिंग आउटपुट पूरी तरह से संभव है। लेकिन बस Horcrux7 रास्ता जाओ और सभी केवल दो विधि कॉल के साथ अच्छा है।

और दुनिया एक और दिन पर रहता है ....


यहां मैं क्या कर रहा हूं:

Obj.writeToStream(toWrite, os);
try {
    String out = new String(os.toByteArray(), "UTF-8");
    assertTrue(out.contains("testString"));
} catch (UnsupportedEncondingException e) {
    fail("Caught exception: " + e.getMessage());
}

जहां ओएस एक ByteArrayOutputStream







stream