如何在try-with-resources中正确使用OutputStream?

时间:2013-11-29 14:56:36

标签: java outputstream

我有一段简单的代码,它的工作方式与我期望的方式不同:

        try (OutputStream ostr = new BufferedOutputStream(System.out)) {
            ostr.write("lol".getBytes());
        }
        System.out.println("hmmm");

结果只是

lol

已打印,但不是hmm

我做错了什么?如果由于hmm关闭ostr而未打印System.out,我是否正确?我知道这是一个非常合理的例子,但我仍然希望得到答案。

1 个答案:

答案 0 :(得分:2)

try结构最后关闭ostr。结束时传播到System.out。随后调用System.out.println("hmmm");会使System.out遇到麻烦 - 但不会抛出异常。 (这是PrintStream处理错误的奇怪方式。)试试这个:

System.out.close();
System.out.println("hmmm");
System.err.println("System.out in trouble: " + System.out.checkError());

打印(通过仍然完整的System.err流):

System.out in trouble: true