我正在尝试学习如何使用Apache Commons VFS2。
我已经阅读了所有可以找到的文档,并且对API已有一定的了解,但是还有一件事我不太清楚。
缓存机制如何工作?特别是:
我没有理解缓存策略和FilesCache接口之间的区别。什么时候使用?
在此处的文档中有这样的说法:http ://wiki.apache.org/commons/VfsCacheStrategy ...共有3种可能的缓存策略,每一种都将详细说明。我得到了“最简单的” on_call策略,但其他两个我没有。例如,如果我们选择MANUAL策略,则说“您必须使用fileObject.refresh()来使用文件系统刷新对象”。但是,这到底意味着什么?这是否意味着如果我将字节写入此FileObject的FileContents,则在关闭文件对象或调用refresh之前,它们实际上不会被写入?如果我有2个从相同URI解析的FileObjects,并且我删除了第一个的delete()怎么办?由于文件对象已被缓存,第二个的exist()方法是否仍会返回true?
当我尝试在计算机上本地使用不同的缓存策略时,实际上并没有发现任何差异。它们的行为都相同,并且文件始终与FS同步(或者至少它们并不同步)。
从CacheStrategy
根本上控制FileObject
多个调用之间的元数据的重新同步。在FileObject
决定何时刷新其对世界的看法。
它将在refresh()
您每次解决它时调用,或者refresh()
在每次FileObject
方法调用之前(通过OnCallRefreshFileObject
装饰器)调用,或者永远不会自动调用。
refresh()
大多数情况下FileObject
,会将状态设置为“已分离”,因此当下一个操作与一起检查时,会重新读取该状态attach()
。
它主要与诸如属性和子代之类的元数据有关,我认为没有任何文件系统提供程序实际缓存内容。
的FilesCache
是缓存的情况下,实际负责FileObject
其间的resolveFile()
呼叫。因此,如果碰巧解析或导航到同一文件,您还将获得相同的Java对象实例(除非您使用NullFilesCache
或LRUFilesCache
缓存使某些条目过期)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句