I/O Einsteiger

Zwei Dateien effizient vergleichen, ohne sie in den Speicher zu laden.

✕ 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.

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
Files.mismatch()
Verfügbar

Seit JDK 12 allgemein verfügbar (März 2019)

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.

Teilen 𝕏 🦋 in