2015-01-06 10 views
5

나는 Apache Commons VFS2를 사용하는 방법을 배우려하고있다.커먼즈 VFS 캐시는 어떻게 작동합니까?

내가 찾을 수있는 모든 문서를 읽었으며 이미 API에 익숙하지만 아직 나에게 분명하지 않은 한 가지가 있습니다.

캐시 메커니즘은 어떻게 작동합니까? 특히 :

  • 캐시 전략과 FilesCache 인터페이스의 차이점은 없습니다. 언제 사용됩니까?

  • 여기 docu에서 다음과 같이 말합니다. http://wiki.apache.org/commons/VfsCacheStrategy ... 세 가지 가능한 캐시 전략이 있으며 각각에 대해 자세히 설명합니다. 나는 "가장 간단한"on_call 전략을 얻었지만 다른 두 전략은 얻지 못합니다. 예를 들어 - MANUAL 전략을 선택하면 "은 파일 시스템으로 개체를 새로 고치려면 fileObject.refresh()를 사용해야합니다."라고합니다. 그러나 이것이 정확히 무엇을 의미합니까? 이 FileObject의 FileContents에 바이트를 쓰면 파일 객체를 닫거나 새로 고침 할 때까지 실제로 쓰여지지 않을 것입니까? 동일한 URI에서 2 개의 FileObject가 처리되고 첫 번째 파일 객체가 삭제되면 어떻게됩니까? 파일 객체가 캐시되기 때문에 두 번째의 exist() 메소드는 여전히 true를 반환할까요?

내 컴퓨터에서 로컬로 다른 캐시 전략을 사용하려고 할 때 실제로 동작에 차이점을 찾지 않습니다. 그것들은 모두 동일하게 동작하며 파일은 FS와 항상 동기화됩니다 (또는 최소한 FS가 아닌 것은 눈에 띄지 않습니다).

답변

4

CacheStrategy은 기본적으로 복수 호출 사이의 FileObject 안에있는 메타 데이터의 재 동기화를 제어합니다. FileObject은 언제 세계의 시야를 새로 고칠 지 결정합니다.

이 때마다 resolve 그것을 refresh()를 호출하거나 결코 자동으로 (OnCallRefreshFileObject 장식을 통해) 각 FileObject 메소드 호출하기 전에 refresh() 전화를 걸거나 것입니다.

refresh() 대부분의 시간은 FileObject 상태를 분리로 설정하므로 다음 작업이 attach()으로 확인되면 새로 읽습니다.

대부분 속성 및 하위와 같은 메타 데이터와 관련되어 있으므로 실제로 콘텐츠를 캐시하는 파일 시스템 제공자는 없다고 생각합니다.

FilesCache은 실제로 호출 사이에 FileObject의 인스턴스를 캐시합니다. 따라서 동일한 파일을 확인하거나 탐색하는 경우 동일한 자바 객체 인스턴스를 가져옵니다 (NullFilesCache 또는 LRUFilesCache 캐시가 일부 항목 만료되지 않은 경우).