2013-12-14 45 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