Adr*_*uat 555 java string io stream
将输出从java.io.OutputStream传递到Java中的String的最佳方法是什么?
说我有方法:
writeToStream(Object o, OutputStream out)
Run Code Online (Sandbox Code Playgroud)
它将对象中的某些数据写入给定流.但是,我希望尽可能轻松地将此输出转换为String.
我正在考虑写一个这样的课程(未经测试):
class StringOutputStream extends OutputStream {
StringBuilder mBuf;
public void write(int byte) throws IOException {
mBuf.append((char) byte);
}
public String getString() {
return mBuf.toString();
}
}
Run Code Online (Sandbox Code Playgroud)
但有更好的方法吗?我只想进行测试!
Hor*_*ux7 588
我会用一个ByteArrayOutputStream.完成后你可以打电话:
new String( baos.toByteArray(), codepage );
Run Code Online (Sandbox Code Playgroud)
或更好
baos.toString( codepage );
Run Code Online (Sandbox Code Playgroud)
对于String构造函数,String可以是String或java.nio.charset.Charset的实例.可能的值是java.nio.charset.StandardCharsets.UTF_8.
方法toString只接受String作为codepage参数(Stand Java 8).
Joe*_*dge 45
我喜欢Apache Commons IO库.看看它的ByteArrayOutputStream版本,它有一个toString(String enc)方法以及toByteArray().使用像Commons项目这样的现有和可信组件可以让您的代码更小,更容易扩展和重用.祝好运.
小智 24
这很好用
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();
}
};
Run Code Online (Sandbox Code Playgroud)
方法调用= >> marshaller.marshal( (Object) toWrite , (OutputStream) output);
然后打印字符串或获取它只是引用"输出"流本身作为示例,将字符串打印到console = >> System.out.println(output);
仅供参考:我的方法调用marshaller.marshal(Object,Outputstream)是使用XML.这与这个话题无关.
这对于生产使用来说是非常浪费的,转换的方式太多而且有点松散.这只是为了证明你完全有可能创建一个自定义的OuputStream并输出一个字符串.但是只需要使用Horcrux7方式,仅使用两个方法调用就可以了.
世界生活在另一天......
Adr*_*uat 15
这是我最终做的事情:
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());
}
Run Code Online (Sandbox Code Playgroud)
os是一个ByteArrayOutputStream.
baos.toString(StandardCharsets.UTF_8);
Run Code Online (Sandbox Code Playgroud)
通过使用指定的字符集解码字节,将缓冲区的内容转换为字符串。
Java 17 - https://docs.oracle.com/
| 归档时间: |
|
| 查看次数: |
586337 次 |
| 最近记录: |