将OutputStream获取为String
题
将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构造函数, 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);
然后打印字符串或者只是引用“输出”字符串。流本身 例如,要将字符串打印到console =&gt;&gt; <代码>的System.out.println(输出); 代码>
仅供参考:我的方法调用 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
。