將OutputStream轉換爲字符串

將輸出從java.io.OutputStream傳遞到Java中的String的最佳方法是什麼? java

說我有方法: app

writeToStream(Object o, OutputStream out)

它將某些數據從對象寫入給定的流。 可是,我但願將此輸出儘量容易地轉換爲String。 ide

我正在考慮編寫這樣的類(未經測試): 函數

class StringOutputStream extends OutputStream {

  StringBuilder mBuf;

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

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

可是有更好的方法嗎? 我只想進行測試! 測試


#1樓

這很好 ui

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); this

而後打印字符串或獲取字符串,只需引用「輸出」流自己便可。例如,將字符串打印到console = >> System.out.println(output); 編碼

僅供參考:個人方法調用marshaller.marshal(Object,Outputstream)用於處理XML。 它與本主題無關。 spa

這對於生產用途是很是浪費的,存在太多的轉換方式,而且有點鬆散。 剛剛進行了編碼,以向您證實徹底有可能建立自定義OuputStream並輸出字符串。 可是,只要按照Horcrux7的方式進行,那麼只需兩個方法調用就能夠了。 code

世界生活在另外一天。


#2樓

我將使用ByteArrayOutputStream 。 完成後,您能夠致電:

new String( baos.toByteArray(), codepage );

或更好:

baos.toString( codepage );

對於String構造函數, codepage能夠是Stringjava.nio.charset.Charset的實例。 可能的值是java.nio.charset.StandardCharsets.UTF_8

方法toString()僅接受String做爲codepage參數(Java 8)。


#3樓

我喜歡Apache Commons IO庫。 看一下它的ByteArrayOutputStream版本,它具備toString(String enc)方法以及toByteArray() 。 使用Commons項目之類的現有且受信任的組件,可以使您的代碼更小,更易於擴展和從新利用。


#4樓

我最終要作的是:

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());
}

其中os是ByteArrayOutputStream

相關文章
相關標籤/搜索