Commons VFS Cache如何工作?

mdz*_*dzh 5 java vfs apache-commons-vfs

我正在尝试学习如何使用Apache Commons VFS2.

我已经阅读了所有可以找到的文档,而且我已经熟悉了API,但仍然有一件事对我来说并不是很清楚.

Cache机制如何工作?特别是:

  • 我没有区分缓存策略和FilesCache接口.哪个用的?

  • 在这里的文档中说:http://wiki.apache.org/commons/VfsCacheStrategy ...有3种可能的缓存策略,每种都有详细解释.我得到了"最简单"的on_call策略,但其他两个我没有.例如 - 如果我们选择MANUAL策略,则说" 你必须使用fileObject.refresh()来刷新文件系统对象 ".但究竟是什么意思呢?这是否意味着如果我将字节写入此FileObject的FileContents,它们实际上不会被写入,直到我关闭文件对象或调用刷新?如果我有2个从同一URI解析的FileObjects并且我删除()第一个?由于缓存了文件对象,第二个的exists()方法是否仍会返回true?

当我尝试在我的机器上本地使用不同的缓存策略时,我并没有发现行为上的任何差异.它们的行为都相同,并且文件始终与FS同步(或者至少它们不是很明显).

eck*_*kes 4

基本上CacheStrategy控制多个调用之间元数据的重新同步FileObject。决定FileObject何时刷新其世界观。

它会refresh()在每次解析refresh()时调用,或者在每次FileObject方法调用之前调用(通过OnCallRefreshFileObject装饰器),或者从不自动调用。

refresh()大多数情况下将FileObject状态设置为分离,因此当下一个操作使用 进行检查时会重新读取它attach()

它主要与属性和子项等元数据相关,我认为没有任何文件系统提供者实际缓存内容。

实际上FilesCache负责缓存FileObject中间resolveFile()调用的实例。因此,如果您碰巧解析或导航到同一个文件,您也将获得相同的 java 对象实例(除非您使用NullFilesCacheLRUFilesCache缓存使某些条目过期)。