【问题标题】:Does an open InputStream always create a leak?打开的 InputStream 是否总是会产生泄漏?
【发布时间】:2013-12-14 04:22:07
【问题描述】:

在工作中发现了这段代码,我的首席开发人员说:“它可能会导致内存泄漏。”并且表现得好像没什么大不了的。

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

不关闭输入流。这是在 Android 中,所以它的 Java 1.6 中 InputStream 没有实现 AutoCloseable。每次使用都会导致内存泄漏,对吗? (我意识到这也应该在 try/catch/finally 中完成。)

【问题讨论】:

  • 你可以在 finally 方法中使用 android 中的 is.Close() 方法。这应该避免泄漏。
  • 我如何在特定场景中提出问题而被否决,以便更好地了解它的工作原理?

标签: java android inputstream java-6


【解决方案1】:

这取决于 InputStream。例如。 FileInputStream 占用了一些操作系统资源,如果我们不关闭它可能会导致资源泄漏。但是如果 InputStream 是 ByteArrayInputStream 就不会有泄漏。

在任何情况下我们都应该关闭 InputStream,它应该在 finally 块或更好的 try-with-resources 语句中。

【讨论】:

  • 在我们的例子中,我们得到了由 HttpResponse.response.getEntity().getContent() 生成的 InputStream。 (我正在尝试自己解决这个问题,因此非常感谢您的帮助。)
猜你喜欢
  • 2020-03-19
  • 1970-01-01
  • 1970-01-01
  • 2022-11-04
  • 2010-09-19
  • 2020-04-14
  • 2019-03-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多