FileOutputStream은 데이터를 바이트 단위로 파일에 기록하는 Java 클래스입니다. 텍스트 파일, 이미지 파일 등 다양한 유형의 파일에 데이터를 저장할 때 사용됩니다. store(), flush(), sync() 메소드를 사용하여 데이터 손실을 방지할 수 있습니다.
store()와 flush() 메소드
- store(): 데이터를 임시 버퍼에 기록합니다.
- flush(): 버퍼에 남아 있는 데이터를 강제로 파일에 기록하여 데이터 손실을 방지합니다.
sync() 메소드
- sync(): 데이터가 물리적 디스크에 안전하게 기록되었는지 확인합니다.
flush()와 sync() 메소드의 차이점
flush() 메소드
- 역할: 버퍼에 남아 있는 데이터를 강제로 출력 스트림에 기록합니다.
- 사용 목적: 데이터 손실을 방지하고, 즉시 데이터를 전송하기 위해 사용됩니다.
- 예시: 네트워크 전송, 파일 저장 등에서 버퍼링된 데이터를 강제로 보내야 할 때 사용합니다.
sync() 메소드
- 역할: 파일 시스템의 모든 내부 버퍼가 디스크에 기록되도록 보장합니다.
- 사용 목적: 데이터의 일관성과 안정성을 보장하기 위해 디스크에 안전하게 데이터를 기록합니다.
- 예시: 중요 데이터 저장 시, 시스템 장애나 전원 손실이 발생해도 데이터를 보호할 때 사용합니다.
try (FileOutputStream fos = new FileOutputStream("example.xml")) {
transformer.transform(source, new StreamResult(fos));
fos.flush(); // 버퍼에 남아 있는 데이터를 강제로 기록
fos.getFD().sync(); // 디스크에 안전하게 기록되었는지 확인
} catch (IOException e) {
e.printStackTrace();
}
기존에 flush까지 사용했을 때 특정 상황에 데이터가 저장되지 않는 현상을 겪으셨다면 getFD().sync()까지 사용해서 디스크에 강제 저장되도록 해보시는 것도 추천합니다.
'프로그래밍 언어 > JAVA' 카테고리의 다른 글
JAVA - 배열 복사하기 (2) | 2024.03.15 |
---|---|
Java - 문자열(String) 과 정수(int) 변환 (0) | 2024.03.13 |
Java - 대소문자 구분 / 대소문자 변환 (문자) (0) | 2024.03.13 |
JAVA - 파일 입출력 ( FileOutputStream, FileInputStream, FileReader, FileWriter) (0) | 2023.06.20 |
JAVA - == 와 .equals() 차이 (0) | 2023.06.19 |