首页 文章

将OutputStream获取为String

提问于
浏览
517

将输出从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();
  }
}

但有更好的方法吗?我只想进行测试!

4 回答

  • 548

    我喜欢Apache Commons IO库 . 看看它的ByteArrayOutputStream版本,它有 toString(String enc) 方法和 toByteArray() . 使用像Commons项目这样的现有和可信组件可以让您的代码更小,更容易扩展和重用 . 祝好运 .

  • 43

    这是我最终做的事情:

    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 .

  • 23

    这很好用

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

    然后打印字符串或获取它只是引用"output"流本身作为示例,将字符串打印到console = >> System.out.println(output);

    仅供参考:我的方法调用 marshaller.marshal(Object,Outputstream) 用于处理XML . 这与这个话题无关 .

    这对于 生产环境 使用来说是非常浪费的,转换的方式太多而且有点松散 . 这只是为了证明你完全有可能创建一个自定义的OuputStream并输出一个字符串 . 但是只需要使用Horcrux7方式,只需两次方法调用即可 .

    世界生活在另一天......

  • 12

    我会用 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) .

相关问题