Rozdiely medzi rozhraním Java WatchService API a knižnicou monitorov IO Apache Commons

1. Prehľad

Dávno pred Jávou WatchService Rozhranie API bolo vydané v prostredí Java 7, knižnica Apache Commons IO Monitoring už riešila rovnaký prípad použitia sledovania zmien v súborovom systéme alebo adresári.

V tomto článku sa chystáme preskúmať rozdiely medzi týmito dvoma API.

2. Maven závislosti

Ak chcete používať Apache Commons IO, je potrebné do systému pridať nasledujúcu závislosť pom:

 commons-io commons-io 2.5 

A služba hodiniek je samozrejme súčasťou JDK, takže nepotrebuje žiadnu externú závislosť.

3. Porovnanie funkcií

3.1. Spracovanie riadené udalosťami

WatchService API je riadené udalosťami zmeny súborového systému vyvolanými operačným systémom. Tento prístup šetrí aplikáciu pred opakovaným dotazovaním na zmeny v súborovom systéme.

Knižnica Apache Commons IO Monitor na druhej strane zisťuje umiestnenie systému súborov v konfigurovateľnom intervale spánku volaním listFiles () metóda Súbor trieda. Tento prístup premrháva cykly CPU, najmä ak nenastane žiadna zmena.

3.2. Metóda spätného volania

WatchService API neposkytuje metódy spätného volania. Namiesto toho poskytuje dva typy metód dotazovania na kontrolu, či sú k dispozícii nové udalosti zmien na spracovanie:

  1. Metódy blokovania ako anketa () (s parametrom časového limitu) a vziať ()
  2. Neblokujúca metóda ako anketa () (bez parametra časového limitu)

Pri metódach blokovania sa vlákno aplikácie začne spracovávať, až keď budú k dispozícii nové udalosti zmien. Preto nemusí stále voliť nové udalosti.

Podrobnosti a použitie týchto metód nájdete v našom článku tu.

Naproti tomu knižnica Apache Commons IO poskytuje metódy spätného volania na serveri FileAlterationListener rozhranie, ktoré sa vyvolá, keď sa zistí zmena v umiestnení alebo adresári systému súborov.

FileAlterationObserver observer = nový FileAlterationObserver ("pathToDir"); Monitor FileAlterationMonitor = nový FileAlterationMonitor (POLL_INTERVAL); FileAlterationListener listener = nový FileAlterationListenerAdaptor () {@Override public void onFileCreate (súbor súboru) {// kód na spracovanie udalosti vytvorenia} @Override public void onFileDelete (súbor súboru) {// kód na spracovanie udalosti vymazania} @Override public void onFileChange ( Súborový súbor) {// kód na spracovanie udalosti zmeny}}; observer.addListener (poslucháč); monitor.addObserver (pozorovateľ); monitor.start ();

3.3. Preplnenie udalosti

WatchService API je riadené udalosťami operačného systému. Existuje teda možnosť, že vyrovnávacia pamäť operačného systému, ktorá uchováva udalosti, pretečie, ak aplikácia nedokáže udalosti spracovať dostatočne rýchlo. V tomto scenári udalosť StandardWatchEventKinds.OVERFLOW sa aktivuje, čo naznačuje, že niektoré z udalostí sa stratia alebo zahodia skôr, ako si ich aplikácia mohla prečítať.

To si vyžaduje správne zaobchádzanie s PRETOK udalosť v aplikácii, aby sa zabezpečilo, že aplikácia dokáže spracovať akýkoľvek náhly výbuch udalostí zmeny, ktoré môžu spustiť PRETOK udalosť.

Knižnica Commons IO na druhej strane nie je založená na udalostiach operačného systému, a preto neexistuje otázka pretečenia.

V každej ankete získa pozorovateľ zoznam súborov v adresári a porovná ho so zoznamom získaným z predchádzajúcej ankety.

  1. Ak sa v poslednej ankete nájde nový názov súboru, onFileCreate () je vyvolaný poslucháčom
  2. Ak v zozname súborov získanom z poslednej ankety chýba názov súboru nájdený v predchádzajúcom hlasovaní, onFileDelete () je vyvolaný poslucháčom
  3. Ak sa nájde zhoda, v súbore sa skontroluje prítomnosť akýchkoľvek zmien v atribútoch, ako napríklad dátum poslednej zmeny, dĺžka atď. onFileChange () je vyvolaný poslucháčom

4. Záver

V tomto článku sa nám podarilo zdôrazniť kľúčové rozdiely v dvoch API.

Celý zdrojový kód príkladov použitých v tomto článku je ako vždy k dispozícii v našom projekte GitHub.


$config[zx-auto] not found$config[zx-overlay] not found