활성화시 버퍼가 가득 차거나 개행 문자가 출력될 때마다 버퍼를 비우고 데이터를 목적지로 전송한다.
데이터가 실시간으로 출력되므로, 중요한 데이터를 놓치지 않고 즉시 확인할 수 있으나
성능 저하가 발생할 수 있으므로 주의해야 한다.
예를 들어, `PrintStream` 생성자에서 `autoFlush` 매개변수를 사용하여 자동 플러시 기능을 설정할 수 있다.
일반적으로 `System.out`은 자동 플러시가 활성화되어 있다.
https://standout.tistory.com/53
아래 코드를 이해하자.
`printStream1`은 자동 플러시가 활성화되어 있으므로
"Hello, world!" 문자열을 출력할 때마다 자동으로 파일에 출력된다.
반면에 `printStream2`는 자동 플러시가 비활성화되어 있으므로 버퍼가 가득 찰 때까지 데이터가 버퍼에 유지되고,
명시적으로 flush() 메서드를 호출하거나 close() 스트림을 닫을 때에만 데이터가 파일에 출력된다.
import java.io.*;
public class AutoFlushExample {
public static void main(String[] args) {
try {
// 파일에 데이터를 출력하는 PrintStream 생성, 자동 플러시 활성화
PrintStream printStream1 = new PrintStream(new FileOutputStream("output1.txt"), true);
// 파일에 데이터를 출력하는 PrintStream 생성, 자동 플러시 비활성화
PrintStream printStream2 = new PrintStream(new FileOutputStream("output2.txt"), false);
// 데이터 출력
printStream1.println("Hello, world!"); // 자동 플러시 발생
printStream2.println("Hello, world!"); // 자동 플러시 없음
// 스트림 닫기
printStream1.close();
printStream2.close(); // close() 를 호출하지 않고 프로그램이 종료된다면, 버퍼에 있는 데이터는 쓰이지 않고 손실될 수 있다.
} catch (IOException e) {
e.printStackTrace();
}
}
}
'JAVA' 카테고리의 다른 글
문자기반스트림 Reader의 메서드 close() mark() markSupported() read() ready() skip() (0) | 2024.03.21 |
---|---|
PrintStream 다양한 형태로 출력하다 PrintStream() checkError() print() println() printf() 포맷지정자 (0) | 2024.03.21 |
SequenceInputStream 두 개의 입력 스트림을 연결하다 (0) | 2024.03.21 |
DataOutputStream 8가지 기본 자료형의 단위로 쓰다 (0) | 2024.03.21 |
DataInputStream 8가지 기본 자료형의 단위로 읽다 (0) | 2024.03.20 |