2015-01-15 22 views

回答

2

StringWriter上的close()方法没有做任何事情,因为没有任何需要需要完成。

现在我们可以将其与其他类型的Writer(etcetera)进行对比,这些类型需要在“关闭”时间进行操作。例如:

  • A BufferedWriter需要刷新任何缓冲的输出......以便它不会丢失。

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

  • 但是StringWriter不需要做任何事情......所以它不需要。

StringWriter::close()方法的存在,因为它是在其超实际执行。

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

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

6

StringWriter没有文件系统上的任何资源,不像PrintWriter。这是close方法只是为了满足Closable接口。

+0

你是什么意思'没有任何资源'。它有一些数据,不是吗? – lapots

+0

它在内存中有数据,但它不使用'PrintStream'将数据写入磁盘... – Reimeus

+0

@ user1432980你如何“关闭”一个String? – Kayaman

相关问题