2014-01-07 4 views
0

나는자바 만 가까운 기본 스트림

FileInputStream stream = new FileInputStream(...) 

다음이 주위에 다른 스트림을 만들려면 기본 스트림을 생성하는 경우 :

ZipInputStream stream2 = new ZipInputStream(stream) 

ZipInputStream stream3 = new ZipInputStream(stream) 

하고베이스 닫습니다

stream.close() 

을 내가 모든 물줄기로 끝내면 이것으로 충분합니까? 아니면 외부의 물줄기도 닫아야합니까?

편집을 명확하게하기 위해 압축 스트림으로 변경되었습니다.

+2

'SomeOtherSteam'에 따라 다릅니다. [docs] (http://docs.oracle.com/javase/7/docs/api/java/io/FileInputStream.html#close())를 참조하십시오. 확실한. – Maroun

답변

0

당신은 API를 읽어야합니다, 나는 ZipInputStream의 생성 방법에 따라 다시 닫아야한다고 생각합니다. 기본 스트림의 참조를 다시 실행하면 다시 닫지 않을 것이지만 복사본을 반환한다면 기본 스트림의 다시 닫아야한다고 생각합니다. API에 대한 설명이 있습니다.

0

앞서 언급했듯이 API를 읽으면 더 많은 정보를 얻을 수 있습니다.

대안은 자바 7의 try-with-resources을 사용하는 것입니다 :

try (
    FileInputStream stream = new FileInputStream(...); 
    ZipInputStream stream2 = new ZipInputStream(stream); 
    ZipInputStream stream3 = new ZipInputStream(stream) 
) { 
    bw.write(text); 
} 

이 기능은 괄호 안에 선언 된 모든 자원을 닫습니다 암시 finally 블록을 가지고있다. 중첩 스트림의 close 메소드가 두 번 호출 될 수 있으므로이 방법을 사용할 때는 모든 스트림이 CloseableAutoCloseable을 구현하는지 확인하십시오.

+0

유용하다고 판단되면 답변 수락을 고려하십시오. – Sionnach733