본문 바로가기
IT개발/Java

[JAVA] flush()

by dootiger 2014. 10. 13.
반응형


flush()란 무엇일까? 


 

flush()에 대해서 많이 들어 본 것은 사실이다.

이미지 처리 할때는 버퍼의 내용을 비워준다 ?

자바를 공부할 때는 출력한다라는 의미로 이해하고 있다.

지금 네트워크로 넘어와서는 버퍼의 내용을 보낸다. 그것은 즉 버퍼를 비워준다, 출력한다와 같은 건가 생각도 된다.

클라이언트 버퍼의 내용을 서버 버퍼로 보낸다 ?

flush()라는 것에 대해 느낌이라고 해야 하나, 대략적인 것은 알지만 정확하게 깔끔하게 알지는 못하는 느낌이랄까

 

그래서 또 열심히 네이년과 구글, API를 검색하기 시작했다.

 

 

http://diyall.tistory.com/618 님의 블로그에 의하면, 

 

flush()는 현재 버퍼에 저장되어 있는 내용을 클라이언트로 전송하고 버퍼를 비운다. (JSP)

 

 

API에 의하면

OutputStream에 속한 flush()는

 

Flushes this output stream and forces any buffered output bytes to be written out. 

출력 스트림과 버퍼된 출력 바이트를 강제로 쓰게 한다.

 

 

http://www.coderanch.com/t/522900/java/java/flush-Java

 

Campbell Ritchie 
Sheriff  

 

It probably varies from class to class. Here is an example of flush(). What happens is that a buffer might be full, with unread data still in it Flushing that moves all the data out into its destination, emptying the stream or whatever. 

You don't usually have to call flush() if you call close().

 

Stephan van Hulst 
Bartender 
 

Here's one concrete example. 
Let's say you have a BufferedOutputStream wrapped around a Socket's OutputStream. You want to send a load of data, but you don't want to close the connection yet. 
After you're done writing everything you want to send, some data may still be in the buffer. Now you will have to flush the buffer, to force it to send all the data.

 

 

(출처 써 놓으면 괜찮을 것이라 믿으며 인용했습니다.) 

 

 

그리고 buffer가 다 차기 전에 프로그램을 종료하면 buffer에 들어있는 내용은 파일에 쓰여지지 않는다.

그 때 flush()를 호출하면 buffer의 내용이 파일에 쓰여진다. 

(강제적인 느낌이 물씬 풍긴다...)

 

 

flush()를 검색하다보니 같이 나오는 메소드가 바로 close()


flush()와 close()를 같이 쓰는데, 

사실 close 함수가 내부적으로 flush함수를 호출한다고 한다.



사용자가 원할 때 버퍼를 비워주는 것으로 버퍼를 비우는 것은 IO에서는 출력하는 것 이겠고, 네트워크에서는 버퍼의 내용을 

클라이언트나 서버로 보내는 것이겠지. 여기서 사용자가 원할 때라는 말이 포인트인 것 같다.


 



[출처] [JAVA] flush()|작성자 크라키


반응형