我有一个 byte[]
形式的图像,我需要将此图像保存在数据库中。我使用 Active Android 库来实现此目的。我知道用于此目的的 db 中的数据类型应该是 BLOB。我知道 byte[]
不能直接存储,并且我知道它应该序列化。但是当我尝试序列化它时,问题就出现了。
我尝试将byte[]
转换为String
,然后将其插入数据库 - 它有效:我将其保存在数据库中。但是,当我从数据库取回这个字符串并将其转换回字节数组时,该数组不等于第一个数组,因此当我尝试将此数组解码为图像时,我收到了
skia: --- SkImageDecoder::Factory returned 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;
}
}
最佳答案
I know that byte[] can't be stored directly
不正确。 byte[]
可以直接存储到 BLOB
列中。
在 JDBC 中,您可以通过调用 PreparedStatement.setBytes()
来设置它,调用 ResultSet.getBytes()
即可获取.
任何功能性 ORM 都应该支持将 BLOB
列映射到 byte[]
字段。
对于 Active Android,请参阅以下链接:
您可能必须将 byte[]
序列化为 java.sql.Blob
.
关于java - 如何使用 Activity android序列化字节数组并将其存储到数据库中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36205802/