【问题标题】:How does the Commons VFS Cache works?Commons VFS 缓存如何工作?
【发布时间】:2015-03-03 20:36:41
【问题描述】:

我正在尝试学习如何使用 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 同步(或者至少不明显它们不是)。

【问题讨论】:

    标签: java vfs apache-commons-vfs


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-25
      相关资源
      最近更新 更多