찾다

 >  Q&A  >  본문

java - inputStream关闭了,还有必要关闭InputStreamReader和BufferedReader吗?

PHP中文网PHP中文网2803일 전1196

모든 응답(3)나는 대답할 것이다

  • PHP中文网

    PHP中文网2017-04-18 09:32:18

    가장 바깥쪽의 close()를 직접 호출하세요


    업데이트:

    http://docs.oracle.com/javase/8/docs/api/java/io/BufferedReader.html#close--

    스트림을 닫고 이와 관련된 모든 시스템 리소스를 해제합니다

    http://docs.oracle.com/javase/8/docs/api/java/io/InputStreamReader.html#close--

    스트림을 닫고 이와 관련된 모든 시스템 리소스를 해제합니다

    가장 바깥쪽이 닫히고, 가장 바깥쪽이 안쪽을 닫고, 안쪽이 안쪽을 닫는 체인입니다


    물론, 셧다운이 실패할 수도 있다고 고집한다면 결국엔 어쩔 수 없겠죠

    회신하다
    0
  • 阿神

    阿神2017-04-18 09:32:18

    질문이 다음과 같은 경우: BufferedReader가 닫혀 있으면 InputStreamReader와 InputStream을 닫아야 합니까? 그렇다면 이 문제는 정상입니다...

    Java io 패키지의 스트림과 리더는 모두 데코레이터 패턴을 사용합니다. 가장 바깥쪽 데코레이터의 close 메소드만 호출하면 되며, 데코레이션된 스트림이나 리더도 닫힙니다.

    그래도 작동하지 않으면 BufferedReader의 소스 코드를 열고 close 메소드를 보면

    에서 장식한 리더가 닫히는 것을 볼 수 있습니다.

    아무리 어려워도 다음 글을 추천합니다. "Java IO: Streams, 그리고 그 위에 데코레이터 패턴 적용"

    회신하다
    0
  • 怪我咯

    怪我咯2017-04-18 09:32:18

    모든 항목을 순서대로 하나씩 닫아야 합니다. 마지막으로 닫는 것이 좋습니다.

    으아악

    마지막 레벨이 먼저 생성되고, 첫 번째 레벨이 마지막에 생성됩니다

    회신하다
    0
  • 취소회신하다