2017-09-25 5 views
1

나는 주제 다음 읽고 : Should one call .close() on HttpServletResponse.getOutputStream()/.getWriter()?response.getOutputStream()을 통해 ZipOutputStream을 명시 적으로 닫아야합니까?

하지만 제가 건축 다음 사용하는 경우 :

ZipOutputStream zos = new ZipOutputStream(response.getOutputStream()); 

나는 그것을 닫아야 또는 컨테이너가 나 대신 그것을 할 것인가?

+0

'ZipOutputStream.close()'의 javadoc에는 "ZIP 출력 스트림과 필터링되는 스트림을 닫습니다."라는 메시지가 표시됩니다. . – Berger

+0

@Berger, 예, 종료됩니다. 하지만 컨테이너는 response.getOutputStream()을 닫을 것입니다. ans는 닫히지 않습니다. ZipOutputStream – gstackoverflow

답변

1

일반적으로 가장 바깥 쪽 스트림을 닫으면 내부 스트림에 close()이 전파되어 필요한 모든 리소스가 닫힙니다.

물론 제대로 작동하지 않는 스트림을 만들 수는 있지만 ZipOutputStream은 아마도 하나가 아닙니다.

가장 바깥 쪽 스트림에서 close()을 호출하는 것만으로는 충분하지 않을 수 있지만 클래스의 설명서에는 특수 동작이 표시되어야합니다.

+0

내 경우 가장 바깥쪽에있는 스트림은 무엇입니까? – gstackoverflow

+0

@gstackoverflow : 다른 스트림을 래핑하는 스트림, 즉 'ZipOutputStream'이 여기에서 닫습니다. – Berger

+0

@Berger 따라서 ZipOutputStream을 명시 적으로 닫아야합니까? 물론 – gstackoverflow

0

예. ZipOutputStreamclose() 메서드를 명시 적으로 지정하고 here's 코드를 close() 코드로 호출해야합니다. OutputStream을 기본에 close()를 호출하기 전에 우리의 경우 DeflaterOutputStream 통화 finish()

  • close()DeflaterOutputStream 인 슈퍼 클래스의

    • 전화 close() : 그것은 다음과 같은 작업을 수행합니다. 명시 적으로 ZipOutputStreamclose()를 호출하지 않는 경우 일부 않은 데이터로 끝날 수 있도록

    finish() 방법은 남아있는 압축 데이터를 기록합니다. 그래서, 나는 그것을 부르는 것을 권할 것이다.