我有一個序列化圖像的類,並且存儲&使用JPA從數據庫中檢索它。使用JDBC存儲的反序列化對象(帶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
正如詹姆斯曾這樣評價,我曾嘗試使用這種方法來序列化的字符串(使用十六進制格式)轉換爲字節數組:
,並得到了異常:
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)
堅持使用哪個JPA實現,使用哪個字段映射? – DataNucleus 2012-03-21 13:32:36
在@OneToOne字段映射中使用eclipselink。 – 2012-03-21 14:30:37
爲什麼人們將媒體保存在數據庫中?啊! – Eldelshell 2012-04-02 09:47:34