将输出从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
。