将输出从java.io.OutputStream传递到Java字符串的最佳方法是什么?
我说我有办法:
写入到流(objecto,OutputStream out ) )。
将数据从对象写入特定流。 但是,我想尽可能容易地将该输出转换为String。
我正在考虑编写这样的类(没有经过测试)。
classstringoutputstreamextendsoutputstream {
字符串构建器mbuf;
公共void write (intbyte ) throws IOException {
mbuf.append () char ) byte;
}
公共字符串获取
return mBuf.toString (;
}
}
但是有更好的方法吗? 我想做个测试!
#1楼
这很好
output stream output=new output stream (
{
privatestringbuilderstring=new stringbuilder (;
@Override
公共void write (intb ) throws IOException {
this.string.append((char ) b;
}
//netbeansideautomaticallyoverridesthistostring ()
公共字符串
return this.string.toString (;
}
(;
方法调用=marshaller.marshal((object ) toWrite,) ) OutputStream ) output;
然后,为了打印字符串并获取字符串,参考“输出”流本身即可。 例如,在console=system.out.println (output )中打印字符串。
作为参考:我的方法是调用Marshaller.Marshal(object,Outputstream )来处理XML。 与这个主题无关。
这在生产用途上非常浪费,转换方式太多,有点松。 为了证明有可能创建自定义输出流并输出字符串,进行了编码。 但是,如果像Horcrux7那样,用两种方法调用即可。
世界生活在另一天。
#2楼
我用ByteArrayOutputStream。 完成后,请打电话。
newstring(Baos.tobytearray ),代码页);
或更好:
baos.tostring (代码页);
方法toString () )只接受String作为代码页参数(Java 8)。
#3楼
我喜欢Apache Commons IO库。 让我们看一下bytearray输出流的版本。 包括tostring(stringenc )方法和toByteArray )。 使用现有的受信任组件(如Commons项目)会使代码变得更小,更容易扩展和重用。
#4楼
我最终要做的是:
obj.writetostream(towrite,os );
try {
stringout=new string (OS.to bytearray ),' UTF-8 ';
assert true (out.contains (' test string ' ) );
} catch (unsupportedencondingexceptione ) (
故障(caught exception : ) e.getmessage ) );
}
其中操作系统是字节输出流。