gpt4 book ai didi

java - 在 WatchService 中,key.pollEvents() 和 key.reset() 之间会发生什么?

转载 作者:行者123 更新时间:2023-12-01 23:56:24 25 4
gpt4 key购买 nike

看着这个Java example ,关于关键状态,Oracle 说:

Ready indicates that the key is ready to accept events. When first created, a key is in the ready state.

Signaled indicates that one or more events are queued. Once the key has been signaled, it is no longer in the ready state until the reset method is invoked.

WatchKey javadoc:

Events detected while the key is in the signaled state are queued but do not cause the key to be re-queued for retrieval from the watch service

文档没有说明 key.pollEvents()key.reset() 之间生成的事件会发生什么? 假设事件将被缓冲,直到按键重置,并且按键将在重置后立即发出信号。下面的测试似乎支持了这一点。

您能给我一些官方文档吗?或者关于缺乏文档的讨论?

<小时/>
Path dir = Paths.get("test");
WatchService watcher = dir.getFileSystem().newWatchService();
dir.register(watcher, CREATE, DELETE, MODIFY);
while (true) {
WatchKey key = watcher.take();
System.out.println("polling.");
for (WatchEvent<?> event : key.pollEvents()) {
... (details removed) ...
System.out.format(" Event %s in [%s] for entry [%s]%n",
event.kind().name(), registeredDir, childPath);
try { Thread.sleep(20000); } catch (InterruptedException e) { ; }
}
System.out.println("resetting.");
key.reset();
}

...在 sleep() 允许的 20 秒内,我做到了:

  • 创建一个文件,
  • 编辑它,保存它,
  • 重命名,
  • 编辑它,保存它,
  • 删除

输出:

polling.
Event ENTRY_CREATE in [test] for entry [test\file1.txt]
resetting.
polling.
Event ENTRY_MODIFY in [test] for entry [test\file1.txt]
Event ENTRY_DELETE in [test] for entry [test\file1.txt]
Event ENTRY_CREATE in [test] for entry [test\file2.txt]
Event ENTRY_MODIFY in [test] for entry [test\file2.txt]
Event ENTRY_DELETE in [test] for entry [test\file2.txt]
resetting.
<小时/>

谢谢。

最佳答案

看起来额外的事件已被缓冲,并且当缓冲区填满时将被处理或给出 OVERFLOW 事件类型。

来自 watchservice 的文档:

“文件系统报告事件的速度可能比检索或处理事件的速度快,并且实现可能对其可能累积的事件数量施加未指定的限制。如果实现故意丢弃事件,那么它会安排键的 pollEvents 方法返回事件类型为 OVERFLOW 的元素。消费者可以使用此事件作为重新检查对象状态的触发器。”

关于java - 在 WatchService 中,key.pollEvents() 和 key.reset() 之间会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24342216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com