IT story

Java 스트림에서 flush ()의 목적은 무엇입니까?

hot-time 2020. 8. 6. 07:53
반응형

Java 스트림에서 flush ()의 목적은 무엇입니까?


Java에서는 flush()메소드가 스트림에서 사용됩니다. 그러나이 방법을 사용하는 모든 목적이 무엇인지 이해하지 못합니까?

fin.flush();

몇 가지 제안 사항을 알려주십시오.


방법 문서 에서 flush:

출력 스트림을 플러시하고 버퍼링 된 출력 바이트를 강제로 기록합니다. 플러시의 일반적인 계약은 호출이 이전에 작성된 바이트가 출력 스트림의 구현에 의해 버퍼링 된 경우 해당 바이트를 의도 한 대상에 즉시 작성해야한다는 표시입니다.

버퍼링은 주로 I / O 성능을 향상시키기 위해 수행됩니다. 이에 대한 자세한 내용은 Java I / O 성능 조정 문서를 참조하십시오 .


명령을 내릴 때 해당 명령의 스트림은 컴퓨터의 buffer (임시 메모리 위치)라는 메모리 위치에 저장됩니다. 모든 임시 메모리 위치가 가득 차면 flush ()를 사용하여 데이터의 모든 스트림을 플러시하고 완전히 실행하여 버퍼 임시 위치의 새 스트림에 새로운 공간을 제공합니다. 이해하길 바래


스트림에 데이터를 쓰면 즉시 쓰지 않으며 버퍼링됩니다. 따라서 버퍼의 모든 데이터가 작성되었는지 확인해야 할 때 flush ()를 사용하십시오.

스트림을 닫기 전에 모든 쓰기가 완료되었는지 확인해야합니다. 이것이 파일 / 버퍼 라이터의 close ()에서 flush ()가 호출되는 이유입니다.

그러나 스트림을 닫기 전에 언제든지 모든 쓰기를 저장해야하는 경우 flush ()를 사용하십시오.


버퍼가 가득 차면 버퍼링 된 모든 문자열이 디스크에 저장됩니다. 버퍼는 큰 거래를 피하기 위해 사용됩니다! 오버 헤드.

java libs에있는 BufferedWriter 클래스에는 다음과 같은 한 줄이 있습니다.

private static int defaultCharBufferSize = 8192;

버퍼가 가득 차기 전에 데이터를 보내려면 제어 할 수 있습니다. 그냥 플러시하십시오. writer.flush ()를 호출하면 "버퍼에있는 내용을 보내십시오!

참조 서 : https://www.amazon.com/Head-First-Java-Kathy-Sierra/dp/0596009208

페이지 : 453


스트림은 종종 내용을 주기적으로 비운 스레드에 의해 액세스되며, 예를 들어, 화면에 표시하거나, 소켓에 보내거나 파일에 기록합니다. 이것은 성능상의 이유로 수행됩니다. 출력 스트림을 플러시한다는 것은 중지하고 스트림의 내용이 대상으로 완전히 전송 될 때까지 기다린 다음 스트림을 비우고 전송 된 내용으로 실행을 다시 시작한다는 의미입니다.


성능 문제의 경우 첫 번째 데이터는 버퍼에 기록됩니다. 버퍼가 가득 차면 데이터가 출력 (파일, 콘솔 등)에 기록됩니다. 버퍼가 부분적으로 채워져 있고 그것을 output (file, console)에 보내려면, 부분적으로 채워진 버퍼를 output (file, console)에 쓰려면 flush () 메소드를 수동으로 호출해야합니다.

참고 URL : https://stackoverflow.com/questions/2340106/what-is-the-purpose-of-flush-in-java-streams

반응형