我有一个byte[]
图像,我需要将此图像保存在数据库中。我为此使用Active Android库。我知道为此目的,db中的数据类型应为BLOB。我知道byte[]
不能直接存储,我知道应该序列化。但是当我尝试序列化它时-问题出现了。
我尝试将byte[]
转换为String
,然后将其插入数据库-它起作用:我将其保存在数据库中。但是然后,当我从db取回该字符串并将其转换回字节数组时,该数组不等于第一个字节,因此当我尝试将该数组解码为图像时,会收到
Skia:--- SkImageDecoder :: Factory返回null。
我的问题是:我应该怎么做才能序列化字节数组,将其保存到数据库中,反序列化回等于第一个字节数组?我的意思是确切的步骤。
我很长时间以来一直在寻找如何解决此问题的方法,恳请您不要在此处共享Active Android文档的链接或其他类的TypeSerializer
实现示例-我见过很多次。
我需要的是确切的方法来逐步解决此问题。
编辑
我的TypeSerializer的当前代码,使我有机会使用Active 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;
}
}
最佳答案
我知道byte []不能直接存储
不正确byte[]
可以直接存储到BLOB
列中。
在JDBC中,您可以通过调用PreparedStatement.setBytes()
进行设置,并通过调用ResultSet.getBytes()
进行获取。
任何功能性ORM都应支持将BLOB
列映射到byte[]
字段。
对于Active Android,请参见以下链接:
ActiveAndroid Not saving blob type data(Image) in Sqlite
http://stackrun.info/qs?id=is35529638
您可能必须将byte[]
序列化为java.sql.Blob
。
关于java - 如何使用 Activity 的android序列化字节数组并将其存储到数据库中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36205802/