Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- CKA
- mysql 튜닝
- Spring
- 코틀린 코루틴의 정석
- kotlin
- APM
- kotlin spring
- PETERICA
- CloudWatch
- IntelliJ
- 정보처리기사실기 기출문제
- 공부
- aws
- AWS EKS
- Linux
- Elasticsearch
- 정보처리기사 실기 기출문제
- AI
- 기록으로 실력을 쌓자
- Kubernetes
- 티스토리챌린지
- 오블완
- kotlin coroutine
- Pinpoint
- CKA 기출문제
- Java
- 정보처리기사 실기
- minikube
- kotlin querydsl
- MySQL
Archives
- Today
- Total
피터의 개발이야기
[Java 8] Stream은 사용 후 반드시 close 해야합니까? 본문
반응형
소스가 IO 채널인 Files.lines(Path, Charset) Stream만 닫아야 합니다.
스트림에는 BaseStream.close() 메서드가 있고 AutoCloseable을 구현하지만 거의 모든 스트림 인스턴스는 실제로 사용 후 닫을 필요가 없습니다. 일반적으로 소스가 IO 채널인 Stream(ex: Files.lines(Path, Charset)에서 반환된 스트림)만 닫아야 합니다. 대부분의 스트림은 특별한 리소스 관리가 필요하지 않은 Collections, Arrays, generating functions에 의해 지원됩니다. 스트림을 닫아야 하는 경우 try-with-resources 문에서 리소스로 선언할 수 있습니다.
public static void main(String[] args) {
Stream<String> stream = Stream.of("A", "B", "C");
List<String> filter = stream.filter(x -> !x.equalsIgnoreCase("B"))
.collect(Collectors.toList());
// no need close the stream.
//stream.close();
System.out.println(filter); // [A, C]
}
일반적 스트림의 경우 스트림 인스턴스를 사용 후 닫을 필요가 없습니다.
@Test
public void fileWriteTest(){
String path = "c:\\projects\\app.log";
// auto close
try (Stream<String> lines = Files.lines(Paths.get(path))) {
String content = lines.collect(Collectors.joining(System.lineSeparator()));
} catch (IOException e) {
e.printStackTrace();
}
}
소스가 IO 채널인 스트림의 경우 try-with-resources을 사용하여 닫습니다. Java7 이전에, try-catch-finally 구문에서 자원을 해제하였습니다.Java8에서는 AutoCloseable인테페이스로 구현된 자원은 자동으로 close됩니다. close가 작동하는 원리를 파악하기 위해 AutoCloseable을 구현하는 클래스 만들기어 테스트를 진행해 보았다. 그 방법은 이곳에 정리하였습니다.
ㅁ 함께 보면 좋은 사이트
반응형
'Programming > JAVA' 카테고리의 다른 글
[Java] 정규식 사용법 정리, Pattern, Match (1) | 2023.02.17 |
---|---|
[JAVA] 코드 컨벤션의 필요성,IntellJ 코드 컨벤션 설정 (0) | 2023.02.14 |
[JAVA] Mysql varchar에 맞춰 java subString 방법 (0) | 2022.05.23 |
[JAVA] Serialization, 직렬화와 역직렬화 (0) | 2021.01.24 |
[JAVA] Java replace (0) | 2021.01.19 |
Comments