为什么StringWriter中的方法`close`,PrintWriter没有效果?

时间:2015-01-15 12:06:48

标签: java

为什么这个类(StringWriterPrintWriter)方法close没有像javadoc中提到的那样有效?

据我所知,简单没有实现。但为什么呢?

2 个答案:

答案 0 :(得分:6)

StringWriter不同,

PrintWriter在文件系统上没有任何资源。只有close方法才能满足Closable接口。

答案 1 :(得分:2)

close()上的StringWriter方法无法执行任何操作,因为 无需执行任何操作。

现在我们可以将其与需要在“接近”时间做某事的其他类型的Writer(等等)进行对比。例如:

  • BufferedWriter需要刷新任何缓冲的输出......这样它就不会丢失。

  • FileWriter需要对打开的打开文件的本机文件句柄执行关闭。这需要完成,因为如果这些句柄没有关闭,JVM将用完,“打开”将停止工作。

  • 但是StringWriter不需要做任何事情......所以事实并非如此。

存在StringWriter::close()方法,因为它实际上是在其超类中实现的。

该方法存在于超类中, make 它(更多)可用于多态上下文。如果close()中未实现Writer,那么Writer(可关闭且不可关闭)将有两种“类型”,并且使用编写者的应用程序代码需要以不同方式处理它们。

实际上,应用程序可以关闭所有 Writer个对象,知道正确的事情将会完成。在某些情况下,JIT编译器可以优化对StringWriter::close()的调用。在其他方面,从性能角度来看,调用无操作方法的开销很少很重要。