一个事件“重复”是什么意思?

时间:2014-02-24 20:48:04

标签: java events watchservice

阅读WatchEvent的javadoc,我看到count()方法让我知道某个事件是否因其结果而重复。

  

返回事件计数。如果事件计数大于1,则这是重复事件。

这究竟是什么意思?是否意味着两个或更多WatchEvent个对象引用相同的“事件”(例如正在创建的文件)?

我正在试验Oracle网站上example的新WatchService API,这部分让我很困惑,特别是因为我会为连续运行相同的测试代码获得不同数量的事件(我在其中使用FileWriter写入文件但未手动与其进行交互),但count()的结果绝不会超过1。

编辑:我意识到这可能与this other question about repeated events有关,但这并不能解决事件重复的实际意义。

2 个答案:

答案 0 :(得分:2)

我花了一些时间试验这个,这是我的结论:

  

如果同一文件f发生了多个e类型的事件,则会重复针对文件e和事件类型f的事件。

     

如果多个文件ef1f2发生f3类型事件,但每次只发生一次,则不会重复这些事件。

当您从.take() WatchKey WatchService时,对于遇到事件的每个文件,您将获得WatchEvent。如果自上次从.count()获得WatchKey以来,该文件类型多次发生在该文件中,则WatchService将大于1。

也就是说,如果您正在观看其中包含A.txt的目录,则会发生以下事件:

  1. B.txt在目录中创建。
  2. B.txt写入。
  3. A.txt写入。
  4. B.txt已删除。
  5. A.txt再次写入。
  6. 您将获得四个WatchEvents

    1. B.txt的创建事件。
    2. B.txt的修改事件。
    3. A.txt的修改事件。其.count()将为2。
    4. B.txt的删除事件。
    5. 这意味着您3*n中的WatchKey事件永远不会超过n,其中OVERFLOW是目录中任何位置的文件数。

      StandardWatchEventKinds中定义了四种类型的事件,但{{1}}事件表示事件可能已丢失,因此我从上面的数字中省略了它。

答案 1 :(得分:0)

监视服务允许您为目录中的事件注册侦听器。如果在通知服务之前事件多次发生,则会获得增量,而不是让两个此类事件导致通知。

这是关于文件的,因此它处理目录中的文件创建,修改和删除。