代码之家  ›  专栏  ›  技术社区  ›  2rs2ts

事件被“重复”意味着什么

  •  4
  • 2rs2ts  · 技术社区  · 12 年前

    阅读的javadocs WatchEvent ,我看到 count() 方法让我知道事件是否由其结果重复。

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

    这到底是什么意思?是不是意味着两个或更多 监视事件 对象引用相同的“事件”(例如,正在创建的文件)?

    我正在试验 example 在Oracle网站上 WatchService API和这一部分让我感到困惑,特别是因为对于同一测试代码的连续运行,我会得到不同数量的事件(其中我使用 FileWriter 无需手动与其交互),但 count() 永远不超过1。

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

    2 回复  |  直到 12 年前
        1
  •  2
  •   Community Mohan Dere    6 年前

    我花了一段时间对此进行了实验,这是我的结论:

    为文件重复一个事件 f 和事件类型 e ,如果是多个 e 同一文件中发生的类型事件 f .

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

    当你 .take() 一 WatchKey 来自 WatchService ,您将获得 WatchEvent 对于经历事件的每个文件,对于经历的每个事件类型。这个 .count() 如果自上次获得 监视键 来自 监视服务 .

    也就是说,如果您正在查看具有 A.txt 然后发生以下事件:

    1. B.txt 在目录中创建。
    2. B.文本 写入。
    3. A.txt格式 写入。
    4. B.文本 已删除。
    5. A.txt格式 再次写入。

    你会得到四个 WatchEvents :

    1. 的创建事件 B.文本 .
    2. 的修改事件 B.文本 .
    3. 的修改事件 A.txt格式 它的 .count() 将是2。
    4. 的删除事件 B.文本 .

    这意味着你永远不会得到更多 3*n 您的中的事件 监视键 哪里 n 是目录中任何时刻的文件数。

    中定义了四种类型的事件 StandardWatchEventKinds ,但 OVERFLOW event表示事件可能已丢失,所以我在上面的数字中省略了它。

        2
  •  0
  •   arcy    12 年前

    监视服务允许您为目录中的事件注册侦听器。如果一个事件在您的服务被通知之前发生了多次,它会得到一个增量,而不是两个这样的事件导致通知。

    这是专门针对文件的,因此它处理目录中的文件创建、修改和删除。