У меня есть бинарный файл в тестовых ресурсах src/test/resources/file.bin
:
$ ls -la src/test/resources
-rw-r--r-- 1 g4s8 g4s8 5125 Apr 30 19:53 file.bin
Я использую его для тестов для проверки некоторого класса. Перед тестированием мне нужно скопировать содержимое в файловую систему, я использую Thread.currentThread().getContextClassLoader()
для чтения данных:
@Test
public void readsContent(@TempDir final Path tmp) throws Exception {
final ClassLoader clo = Thread.currentThread().getContextClassLoader();
final Path file = Files.createFile(tmp.resolve("file.bin"));
try (
final InputStream res = new BufferedInputStream(clo.getResourceAsStream("file.bin"));
final OutputStream out = new BufferedOutputStream(Files.newOutputStream(file, StandardOpenOption.CREATE, StandardOpenOption.WRITE))
) {
byte[] buf = new byte[8192];
for (int read = res.read(buf); read >= 0; read = res.read(buf)) {
out.write(buf, 0, read);
}
}
// test code
}
Но содержимое этого файла больше ожидаемого и отличается от что было в файле ресурсов:
$ ls -la /tmp/junit18423574017636618834/
-rw-r--r-- 1 g4s8 g4s8 9350 May 1 12:22 file.bin
Размер файла результата 9350
байтов, но исходный файл был 5125
. С помощью шестнадцатеричного редактора я выяснил, что только первые два байта этих файлов одинаковы, все остальные данные отличаются:
Что не так с моим кодом? Почему этот файл не может быть правильно прочитан стандартным способом через ClassLoader
?