在Java中,将输出从Java .io. outputstream管道到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或java.nio.charset.Charset的实例。可能的值为java.nio.charset.StandardCharsets.UTF_8。
方法toString()只接受String作为代码页参数(Java 8)。
这工作得很好
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();
}
};
方法call =>>编组器。marshal((Object) toWrite, (OutputStream) output);
然后,要打印字符串或获取字符串,只需引用“输出”流本身
例如,将字符串输出到console =>> System.out.println(output);
供参考:我的方法调用marshler .marshal(对象,Outputstream)是用于处理XML的。这与这个话题无关。
这对于生产使用来说是非常浪费的,有太多的转换,它有点松散。这只是为了向您证明创建自定义outputstream并输出字符串是完全可能的。但只要走Horcrux7的方式,一切都很好,只有两个方法调用。
世界生活在另一天....