2016-03-24 25 views
1

我有一個圖像爲byte[],我需要將此圖像保存在數據庫中。我爲此使用了活動Android庫。我知道db中爲此目的的數據類型應該是BLOB。我知道byte[]不能直接存儲,我知道它應該被序列化。但是,當我嘗試序列化它時 - 出現問題。如何序列化字節數組並將其存儲到數據庫中使用主動android?

我試圖將byte[]轉換爲String,然後將它插入數據庫 - 它工作:我將它保存在數據庫中。但是,當我從db獲取這個字符串並將其轉換回字節數組時,這個數組不等於第一個,所以當我嘗試將此數組解碼爲我收到的圖像時

skia: --- SkImageDecoder :: Factory返回null。

我的問題是:我應該怎麼做序列化字節數組,將其保存到數據庫,反序列化它返回到字節數組將等於第一個?我的意思是正確的步驟。

我真的在尋找如何解決這個問題很長一段時間,我懇請您不要在這裏分享鏈接到活動Android文檔或其他類的實例TypeSerializer的實例 - 我看了很多次。 我需要的是如何一步一步解決這個問題的方法。

編輯

我TypeSerializer的

本次代碼這給了我機會,在數據庫保存字節數組的Android活躍

public class ByteArraySerializer extends TypeSerializer { 

    @Override 
    public Class<?> getDeserializedType() { 
     return byte[].class; 
    } 

    @Override 
    public Class<?> getSerializedType() { 
     return String.class; 
    } 

    @Override 
    public Object serialize(Object o) { 
     if (o != null) { 
      return new String((byte[]) o); 
     } 
     return null; 
    } 

    @Override 
    public Object deserialize(Object o) { 
     if (o != null) { 
      String str = (String) o; 
      return str.getBytes(); 
     } 
     return null; 
    } 
} 
+0

字節數組在技術上已經序列化。序列化的要點是將對象轉換爲字節數組格式。而且一個字節數組已經是字節數組格式。 :-)也許你應該分享一些代碼,以便我們看到你想要做的事情。 –

+0

在這種情況下,序列化意味着將對象轉換爲可放置在數據庫中的類型。單字節可以很容易地存儲,但字節數組不是。請參閱我的TypeSerializer的代碼。 –

+0

如果你正在處理sqlite,你可以把一個字節數組直接放到表格列中。 –

回答

0

我知道的byte []不能直接存儲

錯誤。 A byte[]可以直接存儲在BLOB列中。

在JDBC中,您可以通過調用PreparedStatement.setBytes()來設置它,並通過調用ResultSet.getBytes()來獲得它。

任何功能性ORM都應支持將BLOB列映射到byte[]字段。

對於Android活躍,看到這些鏈接:

您可能必須序列byte[]java.sql.Blob

相關問題