Java에서 flush()
메서드는 스트림에서 사용됩니다. 하지만이 방법을 사용하는 목적이 무엇인지 이해가 안 되나요?
fin.flush();
몇 가지 제안을 들려주세요.
답변
로부터 문서 의 flush
방법 :
출력 스트림을 비우고 버퍼 된 출력 바이트를 강제로 기록합니다. 플러시의 일반적인 계약은이를 호출하는 것은 이전에 기록 된 바이트가 출력 스트림의 구현에 의해 버퍼링 된 경우 해당 바이트가 의도 한 대상에 즉시 기록되어야 함을 나타냅니다.
버퍼링은 주로 I / O 성능을 향상시키기 위해 수행됩니다. 이에 대한 자세한 내용은 Tuning Java I / O Performance 기사에서 읽을 수 있습니다 .
답변
명령을 내리면 해당 명령의 스트림은 컴퓨터의 buffer (임시 메모리 위치)라는 메모리 위치에 저장됩니다. 모든 임시 메모리 위치가 가득 차면 모든 데이터 스트림을 플러시하고 완전히 실행하고 버퍼 임시 위치의 새 스트림에 새 공간을 제공하는 flush ()를 사용합니다. -당신이 이해하기를 바랍니다
답변
스트림에 데이터를 쓸 때 즉시 기록되지 않고 버퍼링됩니다. 따라서 flush()
버퍼의 모든 데이터가 기록되었는지 확인해야 할 때 사용 하십시오.
스트림을 닫기 전에 모든 쓰기가 완료되었는지 확인해야합니다. 이것이 flush()
파일 / 버퍼링 된 writer에서 호출되는 이유 입니다 close()
.
그러나 스트림을 닫기 전에 언제든지 모든 쓰기를 저장해야하는 요구 사항이있는 경우 flush()
.
답변
버퍼가 가득 차면 버퍼링 된 모든 문자열이 디스크에 저장됩니다. 큰 거래를 피하기 위해 버퍼가 사용됩니다! 그리고 오버 헤드.
java libs에있는 BufferedWriter 클래스에는 다음과 같은 한 줄이 있습니다.
private static int defaultCharBufferSize = 8192;
버퍼가 가득 차기 전에 데이터를 보내려면 제어 권한이 있습니다. 그냥 플러시하십시오. writer.flush ()에 대한 호출은 “버퍼에있는 모든 것을 지금 보내십시오!
참고서 : https://www.amazon.com/Head-First-Java-Kathy-Sierra/dp/0596009208
페이지 : 453
답변
스트림은 종종 콘텐츠를 주기적으로 비우는 스레드에 의해 액세스되며, 예를 들어 화면에 표시하거나 소켓에 전송하거나 파일에 기록합니다. 이는 성능상의 이유로 수행됩니다. 출력 스트림을 플러시한다는 것은 중지하고 스트림의 내용이 대상으로 완전히 전송 될 때까지 기다린 다음 스트림이 비어 있고 내용이 전송 된 상태에서 실행을 다시 시작한다는 것을 의미합니다.
답변
성능 문제의 경우 첫 번째 데이터가 Buffer에 기록됩니다. 버퍼가 가득 차면 데이터가 출력 (파일, 콘솔 등)에 기록됩니다. 버퍼가 부분적으로 채워 져서 output (file, console)로 보내려면 부분적으로 채워진 버퍼를 output (file, console)에 쓰기 위해 수동으로 flush () 메서드를 호출해야합니다.