2013-12-14 1 views
-1

Нашел этот код на работе, и мой ведущий разработчик сказал: «Это может вызвать утечку памяти». и поступил так, как будто это было неважно.Открывает ли InputStream постоянную утечку?

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

Без закрытия входного потока. Это в Android, поэтому его Java 1.6, где InputStream не реализует AutoCloseable. Это вызовет утечку памяти КАЖДОЕ время, когда оно будет использоваться, правильно? (и я понимаю, что это также должно быть сделано в try/catch/finally.)

+0

Вы можете использовать метод is.Close() в android в методе finally. Это должно избегать утечки. – Prem

+0

Как я проголосовал за вопрос в конкретном сценарии, чтобы лучше понять, как это работает? – eimmer

ответ

0

Это зависит от InputStream. Например. FileInputStream занимает некоторые ресурсы ОС, которые могут вызвать утечку ресурсов, если мы не закрываем его. Но если InputStream - ByteArrayInputStream, утечки не будет.

В любом случае мы должны всегда закрывать InputStream, он должен быть в конце блока или лучше, но с помощью try-with-resources.

+0

В нашем случае мы получаем InputStream, сгенерированный HttpResponse.response.getEntity(). GetContent(). (Я пытаюсь понять это самостоятельно, поэтому я очень благодарен за помощь.) – eimmer