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

tkr*_*man 5 java outputstream

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

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

结果只是

lol
Run Code Online (Sandbox Code Playgroud)

已打印,但未打印hmm

我究竟做错了什么?我假设hmm没有打印,因为也ostr关闭了,这是正确的吗?System.out我知道这是一个非常综合的例子,但我仍然期待答案。

hal*_*bit 4

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());
Run Code Online (Sandbox Code Playgroud)

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

System.out in trouble: true
Run Code Online (Sandbox Code Playgroud)