У меня есть класс, который сериализует изображение, а также сохраняет и извлекает его из базы данных, используя JPA.
Я решил использовать Base64 вместо сериализации, чтобы упростить процесс для других разработчиков, поэтому при запуске приложения я использую JDBC:
- Читает таблицу в поисках сериализованных изображений.
- Десериализует изображение.
- Сохраняет изображение в другой таблице как изображение Base64.
- Удаляет таблицы и столбцы с использованием старого сериализованного образа.
Единственная проблема заключается в том, что когда я десериализую Изображение с помощью следующего кода:
byte[] buf = rs.getBytes(tableImageField);
InputStream is = rs.getBlob(tableImageField).getBynaryStream();
ObjectInputStream oip = new ObjectInputStream(is);
ImageSerializer imageRead = (ImageSerializer) oip.readObject();
oip.close();
is.close();
rs.close();
Я получаю следующее исключение:
java.io.StreamCorruptedException: unexpected block data
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1360)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1963)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1887)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1770)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1346)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:368)
at es.giro.girlabel.model.manager.AbstractManager.moveImageToCache(AbstractManager.java:199)
at es.giro.girlabel.model.manager.AbstractManager.upgradeDatabase(AbstractManager.java:158)
Сериализованная строка выглядит так:
aced00057372002c65732e6769726f2e6769726c ..... ..... .... .... ... b00000000049454e44ae42608278
Как прокомментировал Джеймс, я попытался преобразовать сериализованную строку (используя шестнадцатеричный формат) в байтовый массив, используя этот подход:
http://bit.ly/bncfKB
И получил исключение:
java.io.StreamCorruptedException: unexpected block data
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1360)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1963)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1887)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1770)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1346)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:368)
at es.giro.girlabel.model.manager.AbstractManager.moveImageToCache(AbstractManager.java:238)
at es.giro.girlabel.model.manager.AbstractManager.upgradeDatabase(AbstractManager.java:202)