如何使用活动的android序列化字节数组并将其存储到数据库中?

时间:2016-03-24 16:55:20

标签: java android activeandroid

我的图像为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;
    }
}

1 个答案:

答案 0 :(得分:0)

  

我知道byte []无法直接存储

不正确的。 byte[]可以直接存储到BLOB列中。

在JDBC中,您可以通过调用PreparedStatement.setBytes()来设置它,并通过调用ResultSet.getBytes()来获取它。

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

对于Active Android,请参阅以下链接:

您可能需要将byte[]序列化为java.sql.Blob