답변:
로부터 문서 의 flush
방법 :
출력 스트림을 비우고 버퍼 된 출력 바이트를 강제로 기록합니다. 플러시의 일반적인 계약은이를 호출하는 것은 이전에 기록 된 바이트가 출력 스트림의 구현에 의해 버퍼링 된 경우 해당 바이트가 의도 한 대상에 즉시 기록되어야 함을 나타냅니다.
버퍼링은 주로 I / O 성능을 향상시키기 위해 수행됩니다. 이에 대한 자세한 내용은 Tuning Java I / O Performance 기사에서 읽을 수 있습니다 .
명령을 내리면 해당 명령의 스트림은 컴퓨터의 buffer (임시 메모리 위치)라는 메모리 위치에 저장됩니다. 모든 임시 메모리 위치가 가득 차면 모든 데이터 스트림을 플러시하고 완전히 실행하고 버퍼 임시 위치의 새 스트림에 새 공간을 제공하는 flush ()를 사용합니다. -당신이 이해하기를 바랍니다
BufferedOutputStream
, BufferedWriter
, ObjectOutputStream,
와 PrintXXX
클래스. flush()
다른 스트림 의 메서드 또는 Writer
아무 작업도 수행하지 않습니다.
flush()
명시 적으로 호출 할 필요가 없습니다 . 플러시 자체를 실행합니다. BufferedWriter
close()
close()
close()
호출 flush()
하므로 FileWriter
버퍼없이 사용할 때 둘 다 호출하는 것이 중복됩니다 .
스트림에 데이터를 쓸 때 즉시 기록되지 않고 버퍼링됩니다. 따라서 flush()
버퍼의 모든 데이터가 기록되었는지 확인해야 할 때 사용 하십시오.
스트림을 닫기 전에 모든 쓰기가 완료되었는지 확인해야합니다. 이것이 flush()
파일 / 버퍼링 된 writer에서 호출되는 이유 입니다 close()
.
그러나 스트림을 닫기 전에 언제든지 모든 쓰기를 저장해야하는 요구 사항이있는 경우 flush()
.
FilterOutputStream
및 의 Javadoc에 의해 보장됩니다 FilterWriter
.
버퍼가 가득 차면 버퍼링 된 모든 문자열이 디스크에 저장됩니다. 큰 거래를 피하기 위해 버퍼가 사용됩니다! 그리고 오버 헤드.
java libs에있는 BufferedWriter 클래스에는 다음과 같은 한 줄이 있습니다.
private static int defaultCharBufferSize = 8192;
버퍼가 가득 차기 전에 데이터를 보내려면 제어 권한이 있습니다. 그냥 플러시하십시오. writer.flush ()에 대한 호출은 "버퍼에있는 모든 것을 지금 보내십시오!
참고서 : https://www.amazon.com/Head-First-Java-Kathy-Sierra/dp/0596009208
페이지 : 453