將輸出從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(); } }
可是有更好的方法嗎? 我只想進行測試! 測試
這很好 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
世界生活在另外一天。
我將使用ByteArrayOutputStream
。 完成後,您能夠致電:
new String( baos.toByteArray(), codepage );
或更好:
baos.toString( codepage );
對於String
構造函數, codepage
能夠是String
或java.nio.charset.Charset的實例。 可能的值是java.nio.charset.StandardCharsets.UTF_8 。
方法toString()
僅接受String
做爲codepage
參數(Java 8)。
我喜歡Apache Commons IO庫。 看一下它的ByteArrayOutputStream版本,它具備toString(String enc)
方法以及toByteArray()
。 使用Commons項目之類的現有且受信任的組件,可以使您的代碼更小,更易於擴展和從新利用。
我最終要作的是:
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
。