java에서 FileOutputStream 과 FileOutputStream을 감싸는 FilterOutputStream를 이용해서 파일을 저장할 때가 있을 때 보통 FilterOutputStream만 flush와 close() 메서드 콜만 하고 끝나는 경우의 코드들이 있다.
그러나 좀 더 확실히 하기 위해서는 FileOutputStream 의 getFD() 메소드를 호출하여 FileDescriptor 를 꺼집어 내서 sync() 메서드 콜을 해야 함으로 안정하게 sync 해야 physical device에 데이터가 저장된다.
flush는 그냥 버퍼를 비우는 것 뿐이고, sync 는 파일시스템 내부의 캐쉬를 모두 physical device로 가는 것이다. 확실히 저장시키는 습관이 필요하다.
1. 일반 IO의 경우는 아래와 같이 사용한다.
FileOutputStream fos = new FileOutputStream(“file.db”);
DataOutputStream stream = new DataOutputStream(fos);
stream.write(1);
stream.flush();
fos.getFD().sync();
stream.close();
-------------------------------
2. NIO의 경우는 아래와 같이 사용한다.
FileOutputStream s = new FileOutputStream(filename) ;
Channel c = s.getChannel() ;
c.write(buffer);
c.force(true) ;
s.getFD().sync() ;
c.close() ;
'general java' 카테고리의 다른 글
전화번호와 관련된 자바 라이브러리 (0) | 2012.03.19 |
---|---|
카산드라(cassandra)의 블룸필터 (bloom filter) (0) | 2012.03.02 |
Common CLI 와 Properties 사용 예제 (0) | 2012.02.17 |
JVisualvm 맛보기 용하기 (0) | 2012.02.16 |
Spring OXM를 이용한 JAXB HttpClient 연동 Example(샘플) (0) | 2012.02.16 |