Эта проблема - настоящая головная боль. У меня есть некоторый код для извлечения ZIP-файла, который выглядит следующим образом:
public File read(InputStream input) throws IOException {
try (final BufferedInputStream bufferedInputStream = new BufferedInputStream(input);
final ZipInputStream inputStream = new ZipInputStream(bufferedInputStream);) {
final File outputFolder = Files.createTempDirectory(null).toFile();
ZipEntry entry;
while ((entry = inputStream.getNextEntry()) != null) {
final File outputFile = new File(outputFolder, entry.getName());
extractEntry(inputStream, outputFile);
}
return outputFolder;
}
}
private void extractEntry(InputStream is, File outputFile) throws IOException {
try (FileOutputStream fos = new FileOutputStream(outputFile);) {
final byte[] buf = new byte[this.bufferSize];
int length;
while ((length = is.read(buf, 0, buf.length)) >= 0) {
fos.write(buf, 0, length);
}
}
}
Мои тесты для этого класса просто сравнивают содержимое файла, который я положил в ZIP-файл, с приведенным выше фрагментом кода:
Assert.assertArrayEquals(Files.readAllBytes(referenceFile), Files.readAllBytes(extractedFile));
Что должно работать в любом случае, верно? Это для меня. Длина файлов на моем компьютере составляет 973 байта.
Однако при запуске на Jenkins те же самые тесты с ошибками приводят к следующему исключению:
java.lang.AssertionError: array lengths differed, expected.length=996 actual.length=973
Фактические числа являются фиксированными, поэтому ожидаемая длина внезапно выше. Я понятия не имею, как это могло произойти. Когда я загружаю файлы, они, безусловно, выглядят одинаково, даже в байтовом сравнении.
В чем проблема?
Я убедился, что на обеих машинах запущен Open JDK 11.0.2, так что на этот раз проблема Java не должна быть проблемой.