Razlike između Java WatchService API-ja i Apache Commons IO Monitor Library

1. Pregled

Mnogo prije Jave WatchService API je objavljen u Javi 7, Apache Commons IO Monitoring knjižnica već se obraćala istom primjeru praćenja lokacije datotečnog sustava ili direktorija za promjene.

U ovom ćemo članku istražiti razlike između dva API-ja.

2. Ovisnosti Mavena

Da biste koristili Apache Commons IO, potrebno je dodati sljedeću ovisnost u pom:

 commons-io commons-io 2.5 

I naravno, služba straže dio je JDK-a, tako da ne treba vanjsku ovisnost.

3. Usporedba značajki

3.1. Obrada vođena događajima

WatchService API pokreću događaji promjene datotečnog sustava koje pokreće operativni sustav. Ovaj pristup sprečava aplikaciju da opetovano više puta vrši anketiranje datotečnog sustava radi promjena.

Apache Commons IO Monitor knjižnica, s druge strane, anketira mjesto datotečnog sustava u prilagodljivom intervalu mirovanja pozivajući listFiles () metoda Datoteka razred. Ovaj pristup troši cikluse procesora, pogotovo ako se ne dogodi nikakva promjena.

3.2. Metoda povratnog poziva

WatchService API ne nudi metode povratnog poziva. Umjesto toga, pruža dvije vrste metoda anketiranja za provjeru jesu li novi događaji promjena dostupni za obradu:

  1. Metode blokiranja poput anketa() (s parametrom vremenskog ograničenja) i uzeti()
  2. Neblokirajuća metoda poput anketa() (bez parametra vremenskog ograničenja)

S metodama blokiranja, nit aplikacije započinje s obradom tek kad su dostupni novi događaji promjena. Stoga ne treba nastaviti anketirati za nove događaje.

Pojedinosti i upotrebu ovih metoda možete pronaći u našem članku ovdje.

Suprotno tome, Apache Commons IO knjižnica pruža metode povratnog poziva na FileAlterationListener sučelje koje se poziva kada se otkrije promjena na mjestu ili direktoriju datotečnog sustava.

FileAlterationObserver promatrač = novi FileAlterationObserver ("pathToDir"); FileAlterationMonitor monitor = novi FileAlterationMonitor (POLL_INTERVAL); FileAlterationListener listener = new FileAlterationListenerAdaptor () {@Override public void onFileCreate (File file) {// kod za obradu događaja stvaranja} @Override public void onFileDelete (File file) {// kod za obradu događaja brisanja} @Override public void onFileChange ( Datoteka datoteke) {// kôd za obradu događaja promjene}}; observer.addListener (slušatelj); monitor.addObserver (promatrač); monitor.start ();

3.3. Prelijevanje događaja

WatchService API pokreću događaji operativnog sustava. Stoga postoji mogućnost da se međuspremnik operativnog sustava koji drži događaje prelije, ako aplikacija ne može dovoljno brzo obraditi događaje. U ovom scenariju događaj StandardWatchEventKinds.OVERFLOW pokreće se što ukazuje da su neki događaji izgubljeni ili odbačeni prije nego što ih je aplikacija mogla pročitati.

To zahtijeva pravilno rukovanje PRELIJEVANJE događaj u aplikaciji kako bi osigurao da aplikacija može obraditi bilo koji nagli niz promjena koji mogu pokrenuti PRELIJEVANJE događaj.

Commons IO biblioteka se, s druge strane, ne temelji na događajima operativnog sustava i stoga nema govora.

U svakoj anketi promatrač dobiva popis datoteka u direktoriju i uspoređuje ga s popisom dobivenim iz prethodne ankete.

  1. Ako se u posljednjoj anketi pronađe novo ime datoteke, onFileCreate () poziva se na slušatelja
  2. Ako na popisu datoteka dobivenom iz posljednje ankete nedostaje naziv datoteke pronađen u prethodnoj anketi, onFileDelete () poziva se na slušatelja
  3. Ako se pronađe podudaranje, datoteka se provjerava ima li promjena u atributima poput datuma zadnje izmjene, duljine itd. Ako se otkrije promjena, onFileChange () poziva se na slušatelja

4. Zaključak

U ovom smo članku uspjeli istaknuti ključne razlike u dva API-ja.

Kao i uvijek, puni izvorni kod za primjere korištene u ovom članku dostupan je u našem projektu GitHub.


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