将OutputStream转换为字符串

将输出从java.io.OutputStream传递到Java中的String的最佳方法是什么? java

说我有方法: app

writeToStream(Object o, OutputStream out)

它将某些数据从对象写入给定的流。 可是,我但愿将此输出尽量容易地转换为String。 ide

我正在考虑编写这样的类(未经测试): 函数

class StringOutputStream extends OutputStream {

  StringBuilder mBuf;

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

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

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


#1楼

这很好 ui

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

而后打印字符串或获取字符串,只需引用“输出”流自己便可。例如,将字符串打印到console = >> System.out.println(output); 编码

仅供参考:个人方法调用marshaller.marshal(Object,Outputstream)用于处理XML。 它与本主题无关。 spa

这对于生产用途是很是浪费的,存在太多的转换方式,而且有点松散。 刚刚进行了编码,以向您证实彻底有可能建立自定义OuputStream并输出字符串。 可是,只要按照Horcrux7的方式进行,那么只需两个方法调用就能够了。 code

世界生活在另外一天。


#2楼

我将使用ByteArrayOutputStream 。 完成后,您能够致电:

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

或更好:

baos.toString( codepage );

对于String构造函数, codepage能够是Stringjava.nio.charset.Charset的实例。 可能的值是java.nio.charset.StandardCharsets.UTF_8

方法toString()仅接受String做为codepage参数(Java 8)。


#3楼

我喜欢Apache Commons IO库。 看一下它的ByteArrayOutputStream版本,它具备toString(String enc)方法以及toByteArray() 。 使用Commons项目之类的现有且受信任的组件,可以使您的代码更小,更易于扩展和从新利用。


#4楼

我最终要作的是:

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

相关文章
相关标签/搜索