Porównuj dwa pliki wydajnie bez ładowania ich do pamięci.
Porównanie kodu
✕ Java 8
// Compare two files byte by byte byte[] f1 = Files.readAllBytes(path1); byte[] f2 = Files.readAllBytes(path2); boolean equal = Arrays.equals(f1, f2); // loads both files entirely into memory
✓ Java 12+
long pos = Files.mismatch(path1, path2); // -1 if identical // otherwise: position of first difference
Widzisz problem z tym kodem? Daj nam znać.
Dlaczego nowoczesne podejście wygrywa
Efektywność pamięciowa
Nie ładuje całych plików do tablic bajtów.
Wskazuje różnicę
Zwraca dokładną pozycję bajtu pierwszej niezgodności.
Jedno wywołanie
Bez ręcznej logiki porównywania tablic bajtów.
Stare podejście
Ręczne porównywanie bajtów
Nowoczesne podejście
Files.mismatch()
Od JDK
12
Poziom trudności
Początkujący
Wsparcie JDK
Files.mismatch()
Dostępne
Szeroko dostępne od JDK 12 (marzec 2019)
Jak to działa
Files.mismatch() zwraca pozycję pierwszego bajtu, który się różni, lub -1 jeśli pliki są identyczne. Odczytuje leniwie i przerywa przy pierwszej różnicy.
Powiązana dokumentacja
Dowód