2016-04-26 64 views
3

InputStream中我使用它使用org.apache.commons.io.IOUtils給定InputStream複製到FileOutputStream以創造一個FileHow to convert InputStream to virtual File答案。我應該關閉的org.apache.commons.io.IOUtils

我應該關閉InputStream嗎?

+0

無需關閉輸入流,我們明確地必須關閉輸出流,如果您想關閉輸出流,您能否提供您面臨的問題? –

+0

我沒有遇到任何問題。我總是遇到問題,無法理解什麼時候以及爲什麼要關閉流。我看到了在不關閉InputStream的情況下將InputStream轉換爲虛擬文件的代碼片段。所以我在考慮是否需要關閉它。 – ilopezluna

+1

經過重新考慮之後,我認爲我們應該關閉它,因爲它將包含指向我們文件的指針/句柄,直到讀取了文件內容的偏移和其​​他相關信息。如果我們關閉它,那麼我們就可以高效地發佈資源創建計劃。 –

回答

6

這是關閉InputStream的最佳做法。看到這個question

org.apache.commons.io.IOUtils.copy不關閉流。所以你必須關閉。

Javadoc

只要有可能,在這一類中的方法不沖洗或關閉 流。這是爲了避免對流的起源和進一步使用做出不可移植的假設。因此,調用者仍然負責 用於在使用後關閉流。

1

編輯:再次讀取的問題後,我必須糾正我的答案,因爲這個問題顯然是關於InputStream從參考答案,而不是OutputStream。需要關閉InputStream(請參閱@Adi的答案)。然而,OutputStream在try-with-resources聲明中,所以這是您不需要關閉的那個。

問題中引用的答案是使用Java 7 try-with-resources Statement,它確保資源在語句結束時關閉。

try-with-resources語句是聲明一個 或更多資源的try語句。資源是在程序完成後必須關閉的對象。 try-with-resources語句 可確保在語句結束時關閉每個資源。

所以對於OutputStreamNO,在特定情況下,你不需要自己關閉OutputStream,只要你是使用try-與資源。

InputStream但是需要關閉

相關問題