我的图像为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;
}
}
答案 0 :(得分:0)
我知道byte []无法直接存储
不正确的。 byte[]
可以直接存储到BLOB
列中。
在JDBC中,您可以通过调用PreparedStatement.setBytes()
来设置它,并通过调用ResultSet.getBytes()
来获取它。
任何功能性ORM都应支持将BLOB
列映射到byte[]
字段。
对于Active Android,请参阅以下链接:
您可能需要将byte[]
序列化为java.sql.Blob
。