获取一个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
? 这就是你应该用于这个目的。