java - OutputStream 输入到String

  显示原文与译文双语对照的内容

在Java中将输出从 java.io.OutputStream 输出到字符串的最佳方法是什么?

假设我有方法:


 writeToStream(Object o, OutputStream out)

将对象的某些数据写入给定流。 但是,我希望尽可能容易地将这个输出转换成字符串。

我正在考虑编写一个像这样的类:


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 );

对于字符串构造函数,codepage 可以是字符串或者 java.nio.charset.Charset的实例。 可能的值是 java.nio.charset.StandardCharsets.UTF_8

方法toString只接受字符串作为 codepage 参数( 站在爪哇 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 ) 输出) ;

然后要打印的字符串或者得到它只是引用该"输出"流本身为例,以将字符串重复打印到控制台=>> System.out.println(output);

仅供参考:我的方法调用 marshaller.marshal(Object,Outputstream) 是用来处理xml的。 这里主题无关。

这是higly对productional使用的浪费,有很多转换方法,而且有些松散。 这只是为了证明你可以创建一个定制的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());
}

操作系统是一个 ByteArrayOutputStream

...