关于java:将OutputStream转换为String

Get an OutputStream into a String

将Java.Io.OuttoString的输出管到Java中的字符串的最佳方法是什么?

假设我有方法:

1
  writeToStream(Object o, OutputStream out)

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

我正在考虑写这样一个类(未经测试):

1
2
3
4
5
6
7
8
9
10
11
12
class StringOutputStream extends OutputStream {

  StringBuilder mBuf;

  public void write(int byte) throws IOException {
    mBuf.append((char) byte);
  }

  public String getString() {
    return mBuf.toString();
  }
}

但是有更好的方法吗?我只想做个测试!


我会用一个ByteArrayOutputStream。完成后,你可以打电话:

1
new String( baos.toByteArray(), codepage );

或更好

1
baos.toString( codepage );

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

ToString方法只接受一个字符串作为EDCOX1×1参数(Read Java 8)。


我喜欢Apache Commons IO库。看看它的bytearrayOutputstream版本,它有一个toString(String enc)方法和toByteArray()方法。使用现有的和可信的组件(如Commons项目)可以使代码更小、更容易扩展和重新调整用途。祝你好运。


这很管用

1
2
3
4
5
6
7
8
9
10
11
12
13
    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的方式进行,只需两个方法调用就可以了。

世界就在另一天…


我最后做的是:

1
2
3
4
5
6
7
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