문제

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

또한 누구나 무엇에 대한 통찰력이 있습니까? force() 실제로, 얼마나 멀리 신뢰할 수 있습니까? OS가 실제로 어딘가에 일부 캐시에 앉아있을 때 데이터가 디스크에 기록되었다고보고 할 수 있습니까? 이 OS/HDD/FileSystem 의존적이 어느 정도입니까?

도움이 되었습니까?

해결책

이것은 완전히 FS 의존적입니다. 그러나 (IO) 예외를 얻지 못하면 JVM을 신뢰하고 거래를 커밋해야합니다. FS를 믿을 수 있는지 여부는 다른 질문입니다. 예를 들어, ext4가 활성화 된 지연된 ext4를 사용하는 경우 RandomAccessFile#Force (부울)가 성공적으로 반환 된 후에도 즉각적인 전력 손실에 대한 데이터를 잃을 수 있습니다. JVM은 운영 체제의 FS-API에 의존하며 실제 구현 및 구성에 신경 쓰지 않습니다.

그리고 네, 폐쇄하기 전에 RandomAccessFile#Force (부울)를 호출해야합니다. #Close가 #force를 호출하는지 여부는 Filechannel의 구현에 달려 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top