53

WatchService は優れたテクノロジのように見えますが、私がテストした OS X および Linux システムでは遅すぎて役に立ちませんでした。けがに侮辱を加えるために、すべてのイベントが通知されるわけではないようです。

これは、私自身のコードと Oracle の正規の例の両方に当てはまります。( http://docs.oracle.com/javase/tutorial/displayCode.html?code=http://docs.oracle.com/javase/tutorial/essential/io/examples/WatchDir.java )

OS X OpenJDK ポートがこの機能について不明であることは認識しています ( https://wikis.oracle.com/display/OpenJDK/Mac+OS+X+Port+Project+Statusを参照) 。

これを本番環境で使用して成功した人はいますか?

4

2 に答える 2

44

変更すると、応答時間が大幅に短縮されます

folder.register(watcher, StandardWatchEventKinds.ENTRY_MODIFY);

folder.register(watcher, new WatchEvent.Kind[]{StandardWatchEventKinds.ENTRY_MODIFY}, SensitivityWatchEventModifier.HIGH);
于 2013-08-21T16:03:42.700 に答える
31

JDK 7には、MacOS用のWatchServiceのネイティブ実装がまだありません。ネイティブファイルシステムイベントをリッスンするのではなく、フォールバックsun.nio.fs.PollingWatchServiceを使用します。これは、ファイルシステムを定期的にトラバースし、ツリー内の各ファイルとサブディレクトリの最後に変更されたタイムスタンプをチェックします。また、使用できないほど遅いことがわかりました。

Mac用のWatchServiceのネイティブ実装があります:

http://code.google.com/p/barbarywatchservice/

自分で使ってみたことはありません。

于 2012-06-25T01:18:55.393 に答える