将输出从java.io.OutputStream传递到Java中的String的最佳方法是什么?
说我有方法:
writeToStream(Object o, OutputStream out)
它将对象中的某些数据写入给定流.但是,我希望尽可能轻松地将此输出转换为String.
我正在考虑写一个这样的课程(未经测试):
class StringOutputStream extends OutputStream { StringBuilder mBuf; public void write(int byte) throws IOException { mBuf.append((char) byte); } public String getString() { return mBuf.toString(); } }
但有更好的方法吗?我只想进行测试!
我会用一个ByteArrayOutputStream
.完成后你可以打电话:
new String( baos.toByteArray(), codepage );
或更好
baos.toString( codepage );
对于String构造函数,String
可以是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);
然后打印字符串或获取它只是引用"输出"流本身作为示例,将字符串打印到console = >> System.out.println(output);
仅供参考:我的方法调用marshaller.marshal(Object,Outputstream)
是使用XML.这与这个话题无关.
这对于生产使用来说是非常浪费的,转换的方式太多而且有点松散.这只是为了证明你完全有可能创建一个自定义的OuputStream并输出一个字符串.但是只需要使用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
.