Calcola che il monitor ha una sua frequenza di aggiornamento che in genere è di 60 Hertz, quindi significa che ogni 16 ms circa i pixel dello schermo vengono rinfrescati... Ovviamente l'occhio umano non si accorge di niente, ma due screenshot in istanti diversi potrebbero lievemente differire, anche perché a seconda dei monitor potresti avere anche altri fenomeni, come sfarfallii, ecc... Puoi anche verificarlo indipendentemente da Java, con il tasto PrintScreen e Paint... Comunque al di là di ciò, se nel tuo desktop remoto vuoi giustamente mandare solo i cambiamenti, controllare "solo" la lunghezza in byte non mi sembra una soluzione molto robusta: paradossalmente potresti avere immagini completamente diverse con dimensioni simili... Senza scomodare algoritmi e librerie di image detection, potresti dare un'occhiata alle funzioni di BufferedImage, ad es. getRGB(), per fare dei controlli sui pixel omologhi in due immagini: se la differenza supera una certa soglia allora la mandi, altrimenti no.