Javadoc Quoth :
스트림에는 BaseStream.close () 메소드가 있으며 AutoCloseable을 구현하지만, 거의 모든 스트림 인스턴스를 실제로 사용한 후 닫을 필요는 없습니다. 일반적으로 소스가 IO 채널 인 스트림 (예 : Files.lines (Path, Charset)에 의해 반환 된 스트림) 만 닫아야합니다. 대부분의 스트림은 컬렉션, 배열 또는 생성 기능에 의해 지원되며 특별한 리소스 관리가 필요하지 않습니다. 스트림을 닫을 필요가 있으면 try-with-resources 문에서 자원으로 선언 될 수 있습니다.
"거의 모든"과 "일반적으로"는 모호합니다. 라이브러리를 작성하고 해당 스트림의 사용자로부터 스트림의 소스를 추상화하는 경우 항상 질문을해야합니다. 이?" 터미널 지원이 호출하지 않기 때문에 IO 기반 스트림을 닫아야합니다 close
. 따라서 효과적으로 항상 스트림이 어디에서 왔는지 기억하거나 문서화해야하거나 항상 스트림을 가져와야 close
합니다.
핵 옵션은 메소드에서 스트림을 반환하지 않거나 JDK 팀의 일부 사람들이 에코 한 감정 인 스트림 매개 변수를 허용하는 것입니다. Streams의 실용적인 유용성을 고려하면 지나치게 제한적이라는 것을 알았습니다.
스트림 닫기에 대한 모범 사례는 무엇입니까? 나는 비슷한 커뮤니티 질문에 대해 활발하게 활동하고 있지만 관련성이없는 JDK 사람들 중 일부의 답변을 온라인에서 찾았습니다.