2013-12-14 1 views
-1

직장에서이 코드를 발견하고 내 리드 개발자가 "메모리 누수가 발생할 수 있습니다."라고 말했습니다. 큰 일이 아닌 것처럼 행동했습니다.열린 InputStream이 항상 누수를 생성합니까?

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

아니요 입력 스트림을 닫지 않습니다. 안드로이드에 있기 때문에 InputStream이 AutoCloseable을 구현하지 않는 Java 1.6입니다. 이 때마다 메모리 누수가 발생할 것입니다, 맞습니까? (그리고 나는 이것도 모두 try/catch/finally에서 수행해야 함을 깨닫는다.)

+0

마침내 방법으로 안드로이드에서 is.Close() 메소드를 사용할 수 있습니다. 이렇게하면 누출이 없어야합니다. – Prem

+0

특정 시나리오에서 질문을하기 위해 어떻게 투표를합니까? 어떻게 작동하는지 더 잘 이해할 수 있습니까? – eimmer

답변

0

이것은 InputStream에 의존한다. 예 : FileInputStream은 일부 OS 리소스를 차지하므로 리소스를 유실시킬 수 있습니다. 그러나 InputStream이 ByteArrayInputStream이면 누수가 발생하지 않습니다.

어쨌든 우리는 항상 InputStream을 닫아야합니다. finally 블록이나 더 나은 아직 try-with-resources 문에 있어야합니다.

+0

우리의 경우 우리는 HttpResponse.response.getEntity(). getContent()에 의해 생성 된 InputStream을 얻고있다. (나는 이것을 스스로 알아 내려고 노력하고 있습니다. 그래서 도움을 정말 고맙게 생각합니다.) – eimmer

관련 문제