Answers:
使用a ByteArrayOutputStream
作为缓冲区:
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.nio.charset.StandardCharsets;
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
final String utf8 = StandardCharsets.UTF_8.name();
try (PrintStream ps = new PrintStream(baos, true, utf8)) {
yourFunction(object, ps);
}
String data = baos.toString(utf8);
PrintStream ps = new PrintStream(baos,true,"utf-8");
,以避免字符集的混乱
new String(baos.toByteArray(), java.nio.charset.StandardCharsets.UTF_8);
可自1.7,它不会抛出
ByteArrayOutputStream.close()
“ 没有效果 ”,因为除了将由垃圾收集器处理的后备数组之外,没有其他资源可以释放。
ByteArrayOutputStream
具有toString(String charsetName)
,但仅接受String参数。另请注意,ByteArrayOutputStream已同步,这可能是不希望的
统一了以前的答案,此答案适用于Java 1.7及更高版本。另外,我添加了代码以关闭Streams。
final Charset charset = StandardCharsets.UTF_8;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos, true, charset.name());
yourFunction(object, ps);
String content = new String(baos.toByteArray(), charset);
ps.close();
baos.close();
也许这个问题可能对您有所帮助: 将OutputStream转换为字符串
子类OutputStream并将其包装在PrintStream中