2012-07-24 47 views
1

我能够使用Jnotify作为文件修改,修改等来收听事件。我的关注点是Jnotify如何工作。我的意思是它使用的事件。参考资源用途是否安全?我读过另一个SO问题 - https://stackoverflow.com/questions/11100003/why-does-jnotify-consume-so-much-resources - 它消耗很多资源。Jnotify如何工作

我可以解决我的问题的另一种方法是一个while循环,直到一个条件然后程序关闭。

哪个更好使用会消耗更少的资源。

+0

我只是想知道,如果它调查事件或听系统总线 – 2012-07-24 13:57:10

回答

4

linnotify与内核通信以获得文件系统更改的通知。没有轮询,内核会通知订阅文件夹的更改。

jnotify是一个围绕的JNI包装libjnotify

尽管如此,如果您使用Java 7,所有这些都是历史记录,取而代之的是新的Java文件I/O(NIO.2)包。

+0

感谢您的快速response.so它是安全的使用?并不会吃资源? – 2012-07-24 13:59:37

+0

哪一个? Java文件I/O或jnotify都不会占用资源,它们都会订阅和*不轮询文件系统。由于本地库,jnotify存在一些可移植性问题。 Java 7的文件I/O没有问题(因为在系统中运行整个JVM时解决了这个问题)。因此,如果您可以使用Java 7,请参阅文件I/O。否则,你别无选择,只能去'jnotify'(或者在无法运行'jnotify'的地方轮询文件系统) – Miquel 2012-07-24 14:05:40

+1

Java 7 WatchService应该是答案,但是...它的速度慢得让人无法接受。我的测试显示MacOS上的延迟时间为8s,Linux上的延迟时间为200-500ms。请参阅http://stackoverflow.com/questions/9588737/is-java-7-watchservice-slow-for-anyone-else – 2014-11-26 15:59:47

2

site ...

JNotify Linux支持

JNotify Linux的API是围绕Linux的inotify的API瘦包装。由于 Linux INotify API不支持在目录上递归侦听, JNotify通过在被监视目录(透明地)下的每个 子目录中创建一个INotify监视来添加此功能。这个 过程需要花费一段时间,该时间与递归观看的树的 中的目录数量成线性关系,并且需要系统资源 即 - 手表手表,默认情况下手表被限制为每个进程8192 手表。

该限制被记录在案。也给出了实现的想法。

您的问题与File changed listener in Java有关,DefaultFileMonitor来自Apache commons。我建议你试试看。

+0

thanx for reply.I已经实现了。如果我们能够在生产环境中使用它,只需要专家的建议,并且不会造成高资源使用等危害 – 2012-07-24 14:05:28