2015-01-15 36 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

相關問題