获取一个OutputStream成一个string

将输出从java.io.OutputStream传递给Java中的String的最好方法是什么?

说我有方法:

writeToStream(Object o, OutputStream out) 

它将某些数据从对象写入给定的stream。 但是,我想尽可能轻松地将此输出转换为string。

我正在考虑写这样的课(未经testing):

 class StringOutputStream extends OutputStream { StringBuilder mBuf; public void write(int byte) throws IOException { mBuf.append((char) byte); } public String getString() { return mBuf.toString(); } } 

但有没有更好的办法? 我只想运行一个testing!

我会使用一个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参数(stand Java 8)。

我喜欢Apache Commons IO库。 看看它的版本的ByteArrayOutputStream ,它有一个toString(String enc)方法以及toByteArray() 。 使用Commons项目等现有的可信组件,可以让代码更小,更容易扩展和重新使用。 祝你好运。

这很好

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

然后打印string或得到它只是引用“输出”stream本身作为一个例子,打印出来的stringconsole = >> System.out.println(output);

仅供参考:我的方法调用marshaller.marshal(Object,Outputstream)用于处理XML。 这与这个话题无关。

这对于生产使用来说是非常浪费的,有许多转换方式,并且有点松动。 这只是编码,以certificate你完全可以创build一个自定义的OuputStream并输出一个string。 但只要去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()); } 

其中os是ByteArrayOutputStream

为什么不使用ByteArrayOutputStream ? 这就是你应该用于这个目的。