I/O Начинающий

Эффективное сравнение двух файлов без загрузки их в память.

✕ 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
Заметили проблему в этом коде? Сообщите нам.

Эффективное использование памяти

Не загружает полные файлы в байтовые массивы.

🎯

Точное определение различия

Возвращает точную позицию байта первого отличия.

📏

Один вызов

Никакой ручной логики сравнения байтовых массивов.

Старый подход
Ручное побайтовое сравнение
Современный подход
Files.mismatch()
Начиная с JDK
12
Сложность
Начинающий
Files.mismatch()
Доступно

Доступно в JDK 12 (март 2019)

Files.mismatch() возвращает позицию первого отличающегося байта или -1, если файлы идентичны. Читает лениво и прерывается при первом отличии.