Я пытаюсь сохранить классы Java в базе данных. Для этого я читаю файлы следующим образом:
bytes = com.google.common.io.ByteStreamsByteStreams.toByteArray(url.openStream());
Затем эти байты кодируются в base64:
org.apache.hadoop.hbase.util.Base64.encodeBytes(bytes);
При их повторной загрузке происходит то же самое наоборот:
org.apache.hadoop.hbase.util.Base64.decode(base64);
и записывается в файл:
com.google.common.io.Files.write(binary, file);
Однако исходный и целевой файлы не идентичны. Использование программы просмотра двоичных файлов показывает, что они действительно очень похожи; только одну вещь, которую я заметил: новый файл начинается с
EF BF BD EF BF BD EF BF BD EF BF BD
вместо ожидаемого
CA FE BA BE
После этого они идентичны, по крайней мере, для нескольких сотен байтов.
Как логическое следствие, я получаю следующее сообщение об ошибке при попытке загрузить класс из нового файла:
java.lang.ClassFormatError: Incompatible magic value 4022320623 in class file ch/unibe/scg/doodle/producerTest/GiantTurtle
Я понятия не имею, где он ломается, и его довольно сложно отлаживать. Мои модульные тесты для чтения/записи файлов зеленые. Где может быть проблема?