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