Apache Commons IO文件监视vs. JDK WatchService

问题描述 投票:4回答:1

我需要开发一个将在预定义目录中创建csv文件的应用程序。预计会有大量的传入文件。

我在产品中看到了使用Apache Commons IO File Monitoring的应用程序。效果很好。我看到它一天可以处理多达2100万个文件。似乎Apache Commons IO文件监视会轮询目录并执行listFiles以处理文件。

我的问题:与Apache Commons IO文件监视一样,JDK WatchService是否是一个不错的选择?有人知道任何利弊吗?

java file-processing watchservice apache-commons-io
1个回答
1
投票

自从我问这个问题以来,我对这个问题有了更多的了解。因此,尝试为可能有类似问题的人回答。

Apache Commons Monitoring使用具有可配置轮询间隔的轮询机制。在每次轮询中,它都会调用File类的listFiles()方法,并与上一次迭代的listFiles()输出进行比较,以识别文件的创建,修改和删除。该算法足够强大,我从未见过任何遗漏。它甚至可以处理大量文件。但是,由于它在每次迭代中轮询并调用listFiles,因此如果输入文件的流入量不大,它将消耗不必要的CPU周期。即使在网络驱动器上也可以使用。

JDK WatchService不需要轮询。它是基于事件的。仅当事件发生时才触发它,因此如果输入文件流入不那么多,则需要更少的CPU。如果输入文件流入量很大,并且事件处理机制以比发生事件的速率低的速率进行处理,则可能会发生事件溢出。此外,它不适用于网络驱动器。

因此,总而言之,如果文件流入是连续不断的并且很大,那么最好使用Apache File Monitoring。否则,JDK WatchService是一个不错的选择。

© www.soinside.com 2019 - 2024. All rights reserved.