5

Apache Commons VFS2 の使用方法を学ぼうとしています。

私は見つけることができるすべてのドキュメントを読んで、すでに API にある程度慣れていますが、まだ完全に明確ではないことが 1 つあります。

キャッシュ メカニズムはどのように機能しますか? 特に:

  • キャッシュ戦略と FilesCache インターフェースの違いがわかりません。どれがいつ使用されますか?

  • ここのドキュメントで言われています: http://wiki.apache.org/commons/VfsCacheStrategy ... 3つの可能なキャッシュ戦略があり、それぞれが詳細に説明されています。「最も単純な」on_call戦略を取得しますが、他の2つは取得しません。たとえば、手動戦略を選択した場合、「fileObject.refresh() を使用してオブジェクトをファイルシステムで更新する必要がある」と言われます。しかし、これは正確には何を意味するのでしょうか? この FileObject の FileContents にバイトを書き込むと、ファイル オブジェクトを閉じるか、refresh を呼び出すまで、実際には書き込まれないということですか? 同じ URI から解決される 2 つの FileObject があり、最初の 1 つを delete() した場合はどうなりますか? ファイル オブジェクトがキャッシュされているため、2 番目の exists() メソッドは true を返しますか?

私のマシンでローカルにさまざまなキャッシュ戦略を試してみると、実際には動作に違いはありません。それらはすべて同じように動作し、ファイルは常に FS と同期しています (または、少なくとも同期していないことは目立ちません)。

4

1 に答える 1

4

は基本的に、中間の複数の呼び出しCacheStrategy内のメタ データの再同期を制御します。FileObjectは、そのFileObject世界観をいつ更新するかを決定します。

解決するrefresh()たびに呼び出されるか、各メソッド呼び出しの前に (デコレーターを介して) 呼び出されるか、自動的には呼び出されません。refresh()FileObjectOnCallRefreshFileObject

refresh()ほとんどの場合、FileObject状態は detached に設定されるため、次のアクションが でチェックされたときに新たに読み込まれattach()ます。

主に属性や子などのメタデータに関連しています。実際にコンテンツをキャッシュするファイルシステムプロバイダーはないと思います。

は、中間呼び出しFilesCacheのインスタンスをキャッシュする役割を実際に担います。そのため、たまたま同じファイルを解決またはナビゲートした場合、同じ Java オブジェクト インスタンスも取得されます (キャッシュを使用したり、一部のエントリが期限切れになったりしない限り)。FileObjectresolveFile()NullFilesCacheLRUFilesCache

于 2015-01-07T16:32:47.917 に答える