5

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

我已经看到在生产中使用 Apache Commons IO File Monitoring 的应用程序。它工作得很好。我已经看到它一天处理多达 2100 万个文件。似乎 Apache Commons IO File Monitoring 轮询目录并执行 listFiles 来处理文件。

我的问题:JDK WatchService 是否与 Apache Commons IO 文件监控一样好?有谁知道任何优点和缺点?

4

1 回答 1

4

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

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

JDK WatchService不需要轮询。它是基于事件的。它仅在事件发生时触发,因此如果输入文件流入量不多,则需要较少的 CPU。如果输入文件流入量很大并且事件处理机制的处理速度比事件发生的速度慢,则可能存在事件溢出。此外,它不适用于网络驱动器。

因此,总而言之,如果文件流入持续且巨大,则最好使用 Apache 文件监控。否则,JDK WatchService 是一个不错的选择。

于 2016-12-07T09:10:28.620 回答