Files.mismatch()
Compare dois arquivos de forma eficiente sem carregá-los na memória.
Comparação de Código
✕ 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
Viu um problema com este código? Nos avise.
Por que a forma moderna ganha
Eficiente em memória
Não carrega arquivos inteiros em arrays de bytes.
Localiza a diferença
Retorna a posição exata do byte da primeira divergência.
Uma chamada
Sem lógica manual de comparação de arrays de bytes.
Abordagem Antiga
Comparação manual de bytes
Abordagem Moderna
Files.mismatch()
Desde o JDK
12
Dificuldade
Iniciante
Suporte JDK
Files.mismatch()
Disponível
Amplamente disponível desde o JDK 12 (março de 2019)
Como funciona
Files.mismatch() retorna a posição do primeiro byte que difere, ou -1 se os arquivos são idênticos. A leitura é feita de forma lazy e interrompe na primeira diferença encontrada.
Documentação Relacionada