Двоичные файлы отличаются, но не JVM? - PullRequest
2 голосов
/ 20 января 2011

У меня возникла проблема, из-за которой org.apache.commons.io.FileUtils.copyFile (Файл, Файл) создает немного другие файлы. Когда я сравниваю эти файлы с bsdiff или в редакторе, я могу сказать, что они разные. Определенные байты копируются как вопросительные знаки. Например 0200 (восьмеричное) копируется как? (077 восьмеричный).

Итак, я создаю тестовый пример для включения в отчет об ошибках. Я делаю копию исполняемого файла, а затем сравниваю, используя FileUtils.checksumCRC32 (File). Неожиданно файлы имеют одинаковую контрольную сумму. Затем я сравниваю их, просматривая FileInputStream каждого файла. Это также подтверждает, что файлы одинаковы.

Файлы, безусловно, отличаются. Один бежит, другой нет. bsdiff создает diff из двух файлов. Я могу сказать, что некоторые байты копируются неправильно, проверив файлы своими глазами.

Однако для JVM эти файлы одинаковы. Есть идеи, почему я наблюдаю это поведение?

Информация о системе: Windows 7, 64 бит; JVM 1.6.0_22, 32 бита

Ответы [ 2 ]

2 голосов
/ 21 января 2011

Эх, извините всех.Maven «фильтровал» исполняемый файл, который изменял кодировку перед копированием в целевой каталог maven.Затем FileUtils правильно копировал испорченный исполняемый файл из «target» в место назначения.Я сравнивал версию из моего исходного каталога с версией в месте назначения.

1 голос
/ 21 января 2011

Эта программа записывает все возможные байты и снова считывает их.Если бы файлы были повреждены, как бы Java превратила эти байты в их исходные значения.то есть как он мог сказать, что 077 это 0200, а не 077.

byte[] bytes = new byte[256];
for(int i=0;i<256;i++)
    bytes[i] = (byte) i;
FileUtils.writeByteArrayToFile(new File("tmp.dat"), bytes);
byte[] bytes2 = FileUtils.readFileToByteArray(new File("tmp.dat"));
System.out.println("equals "+Arrays.equals(bytes, bytes2));

показывает дамп файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...