Commons VFS Cache如何工作?

时间:2015-01-06 07:46:31

标签: java vfs apache-commons-vfs

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

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

缓存机制如何工作?特别是:

  • 我没有区分缓存策略和FilesCache界面。在什么时候使用?

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

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

1 个答案:

答案 0 :(得分:4)

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

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

refresh()大部分时间都将FileObject状态设置为已分离,因此当下一个操作检查attach()时,会立即读取该状态。

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

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