5

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

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

缓存机制是如何工作的?尤其:

  • 我不明白缓存策略和 FilesCache 接口之间的区别。什么时候用哪个?

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

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

4

1 回答 1

4

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

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

refresh()大多数时候将FileObject状态设置为 detached,因此在下一个操作检查时会重新读取attach().

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

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

于 2015-01-07T16:32:47.917 回答