Как сравнить два файла, чтобы увидеть, если они одинаковы? - PullRequest
0 голосов
/ 29 сентября 2018

Раньше я думал, что могу использовать контрольную сумму (MD5 или CRC32) для улучшения метода загрузки.То есть, если контрольная сумма файлов одинакова, я думаю, что это тот же файл.Но однажды я увидел код в org.apache.commons.io.FileUtils, который содержит два метода contentEquals и contentEqualsIgnoreEOL.Есть два способа проверить один и тот же файл.

if (file1.getCanonicalFile().equals(file2.getCanonicalFile())) {  
        // same file  
        return true;  
    } 

и

IOUtils.contentEquals(new FileInputStream(f1), new FileInputStream(f2));

Вот что меня смутило.

  • Я не могу насытитьсяинформация о canonical.Что это значит?
  • он использует поток ввода-вывода для проверки файла вместо контрольной суммы.

Итак, в какой ситуации я должен использовать байты или контрольные суммы для проверки того же файла.

1 Ответ

0 голосов
/ 29 сентября 2018
  1. Первый проверяет путь к файлу, чтобы увидеть, относится ли оба файла к одному и тому же файлу.
  2. Второй проверяет полный файл, чтобы убедиться, что содержимое файла одинаково.

Контрольная сумма

  1. Если две контрольные суммы разные, вы можете с уверенностью сказать, что файлы разные.
  2. Если дваконтрольная сумма равна, вы не можете с уверенностью сказать, что файлы одинаковы.

Контрольная сумма может быть использована для быстрой проверки путем кэширования контрольной суммы каждого файла заранее.

...