본문 바로가기

Java

close() 함수

Stream이란?

                                                                                                                                           


 우리가 키보드에 A를 입력한 경우 화면에 A가 출력이 되는데, 키보드의 A가 입력됐음을 듣고 파일에 A를 전송해주는 것을 누가할까? 바로 입출력을 도와주는 Stream이다.


 키보드 뿐만 아니라, 프린트,마우스, 기타 기기들의 입출력을 도와준다. 사용자의 입장에서 입력을 하면 InputStream, 데이터가 나가면 OutputStream이 있다. 


 InputStream은 Stream으로 데이터를 보냅니다.

 OutputStream은 Stream에 있는 데이터들을 목적지( e.g. 파일 )로 보내버립니다. ( flush()가 다음과 같은 역할을 합니다. )


 우리는 하드웨어적인 복잡한 과정을 신경쓰지 않고 Stream을 사용하기만 하면 됩니다.


InputStream - close()

                                                                                                                                           


동작 과정



( 번역 ) input stream을 닫고, stream과 관련된 system resource들을 release해준다.


close()를 하지 않은 경우 문제

1. open file이나 socket과 같은 OS resource들 차지 ( 그때그때 flush()를 하지 않는 이유가 뭐지? 전송되는 시점이 언제길래? )


OutputStream - close()

                                                                                                                                           


동작 과정


( 번역 ) stream을 close하기 전에 flush()를 호출해 준다. stream이 닫힌 후 write()나 flush()를 호출하면 IOException 처리가 된다. 




close()를 하지 않은 경우 문제

1. close()를 해주지 않으면 file에 쓰려고 했던 data들이 stream에 남아있는 경우가 발생함. ( 그때그때 flush()를 하지 않는 이유가 뭐지? 전송되는 시점이 언제길래? )


2.  kernel resource ( file handle )를 잡고있기 때문에 delete,rename과 같은 것에 대해 lock을 잡아버린다. 

'Java' 카테고리의 다른 글

ClassNotFoundException ( 클래스 로더 정리 )  (0) 2017.09.14
export Jar  (0) 2017.08.21
Interface를 이용하여 Callback 구현하기  (0) 2017.06.03
Java Collections (1)  (0) 2017.03.09
Nashorn  (0) 2017.02.08