Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在try with resources中正确使用OutputStream?_Java_Outputstream - Fatal编程技术网

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

Java 如何在try with resources中正确使用OutputStream?,java,outputstream,Java,Outputstream,我有一段简单的代码,它的工作方式与我期望的不同: try (OutputStream ostr = new BufferedOutputStream(System.out)) { ostr.write("lol".getBytes()); } System.out.println("hmmm"); 结果只是 lol 打印,但不是hmm 我做错了什么?假设hmm没有被打印,因为ostr也关闭了System.out,我的假设

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

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

lol
打印,但不是
hmm


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

try构造在最后关闭了
ostr
。关闭被传播到
系统.out
。随后调用
System.out.println(“hmmm”)
将给System.out带来麻烦,但不会引发异常。(这是
PrintStream
s处理错误的奇怪方式。)尝试以下方法:

System.out.close();
System.out.println("hmmm");
System.err.println("System.out in trouble: " + System.out.checkError());
这将打印(通过仍然完整的System.err流):


嗯。。。我明白了,这真的很奇怪。实际上,我之所以要问这个问题,是因为Jackson的
mapper.writeValue(OutputStream,Object)
方法的一些意外行为。单次写入后,
OutputStream
的实例似乎已关闭,无法进行进一步写入:在第一次调用
write
时成功打印,并将错误设置为下一次调用的结果。对我来说似乎是一个糟糕的设计。至少它似乎是一个未被超越的默认行为。我只是在jacksonjavadoc中点击了一下,读到您需要一个JsonFactory来创建一个ObjectMapper。JsonFactory允许类似于
jsonFactor.configure(JsonGenerator.Feature.AUTO\u CLOSE\u TARGET,false)
。这可能会解决意外的行为,但我没有尝试。是的,这对我来说也是一个选择,但是,在我看来,这种行为是一个奇怪的默认选择。是的,这很有效。再次感谢。
System.out in trouble: true