I/O Débutant

Compare deux fichiers efficacement sans les charger en mémoire.

✕ 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
Un problème avec ce code ? Dites-le nous.

Efficace en mémoire

Ne charge pas les fichiers entiers dans des tableaux d'octets.

🎯

Identifie la différence

Retourne la position exacte de l'octet de la première divergence.

📏

Un seul appel

Sans logique manuelle de comparaison de tableaux d'octets.

Ancienne Approche
Comparaison manuelle d'octets
Approche Moderne
Files.mismatch()
Depuis JDK
12
Difficulté
Débutant
Files.mismatch()
Disponible

Disponible depuis JDK 12 (mars 2019)

Files.mismatch() retourne la position du premier octet qui diffère, ou -1 si les fichiers sont identiques. Lit de façon paresseuse et court-circuite à la première différence.

Partager 𝕏 🦋 in