我有一个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/

10-11 04:54
查看更多