将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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top