Files.mismatch()
Zwei Dateien effizient vergleichen, ohne sie in den Speicher zu laden.
Code-Vergleich
✕ 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
Problem mit diesem Code entdeckt? Sag uns Bescheid.
Warum der moderne Weg gewinnt
Speichereffizient
Lädt keine vollständigen Dateien in Byte-Arrays.
Zeigt den Unterschied genau
Gibt die genaue Byte-Position des ersten Unterschieds zurück.
Ein Aufruf
Keine manuelle Byte-Array-Vergleichslogik.
Alter Ansatz
Manueller Byte-Vergleich
Moderner Ansatz
Files.mismatch()
Seit JDK
12
Schwierigkeitsgrad
Einsteiger
JDK-Unterstützung
Files.mismatch()
Verfügbar
Seit JDK 12 allgemein verfügbar (März 2019)
Wie es funktioniert
Files.mismatch() gibt die Position des ersten abweichenden Bytes zurück oder -1, wenn die Dateien identisch sind. Es liest lazy und bricht beim ersten Unterschied ab.
Zugehörige Dokumentation