2009-07-02 6 views
2

RandomAccessFile을 사용하여 파일의 일부 쓰기 작업을 트랜잭션의 일부로 수행하고 있습니다. 트랜잭션을 커밋하기 전에 데이터가 디스크에 쓰여지는 것을 확실히하고 싶습니다. RAF의 FileChannelforce(boolean)을 호출하면이 보증이 제공되지만 파일을 닫을 때 암시 적으로 호출되거나 수동으로 호출해야합니까?RandomAccessFile.close()는 내부적으로 FileChannel.force()를 호출합니까?

또한 누구나 force()이 실제로하는 일에 대한 통찰력을 갖고 있으며 신뢰할 수있는 정도는 무엇입니까? 사실 운영 체제가 데이터가 디스크에 기록되었다고보고 할 수 있습니까? 실제로 어딘가에 여전히 일부 캐시에 앉아있을 수 있습니까? 이 OS/HDD/파일 시스템에 어느 정도 영향을 줍니까?

답변

0

이것은 완전히 FS에 종속적입니다. 그러나 (IO) Exception을 얻지 못하면 JVM을 신뢰하고 트랜잭션을 커밋해야합니다. FS를 믿을 수 있는지 여부가 다른 질문입니다. 예를 들어 지연 할당이 활성화 된 ext4를 사용하는 경우 RandomAccessFile # force (boolean)가 성공적으로 반환 된 후에도 즉시 전원이 손실 될 수 있습니다. JVM은 운영 체제의 FS-API에 의존하며 실제 구현 및 구성에는 신경 쓰지 않습니다.

그리고 네, 닫기 전에 RandomAccessFile # force (boolean)를 호출해야합니다. #close가 #force를 호출하는지 여부는 FileChannel의 구현에 달려 있습니다.