2013-12-14 42 views
-1

在工作中發現了這段代碼,我的開發人員說:「這可能會導致內存泄漏。」並且表現得沒有什麼大不了的。打開的InputStream是否總會產生泄漏?

InputStream is = ... 
GZIPInputStream zis = new GZIPInputStream(new BufferedInputStream(is)); 
someMethod(zis); 

不關閉輸入流。這是在Android中,所以它的Java 1.6在InputStream中沒有實現AutoCloseable。這將導致內存泄漏每次使用它,正確? (並且我意識到這也應該全部在try/catch/finally中完成)。

+0

您可以在android中的finally方法中使用is.Close()方法。這應該避免泄漏。 – Prem

+0

我如何在特定場景中提出問題而被拒絕,以便更好地理解它的工作原理? – eimmer

回答

0

它取決於InputStream。例如。如果我們不關閉它,FileInputStream會佔用一些可能導致資源泄漏的操作系統資源。但是如果InputStream是ByteArrayInputStream,則不會有泄漏。

在任何情況下,我們都應該關閉InputStream,它應該在finally塊或更好的情況下嘗試使用資源語句。

+0

在我們的例子中,我們得到了由HttpResponse.response.getEntity()。getContent()生成的InputStream。 (我試圖自己解決這個問題,所以我非常感謝幫助。) – eimmer