Java 在Android中存储BLOB';使用SQLOpenHelper创建SQLite

Java 在Android中存储BLOB';使用SQLOpenHelper创建SQLite,java,android,sqlite,blob,inputstream,Java,Android,Sqlite,Blob,Inputstream,有没有一种方法可以使用SQLOpenHelper将BLOB存储到Android的SQLite中 我的类型为InputStreamSQLite的BLOB不支持流式BLOB或CLOB数据。您有四种选择: 将InputStream转换为字节[]。只有当你有足够的内存时,这才有效(见下文) 使用FileOutputStream或支持流的Android API 将数据分成小块,然后存储在SQLite中 使用在Android上工作并支持流媒体的数据库。我只知道这个。但是请注意,Android对H2的支持是

有没有一种方法可以使用
SQLOpenHelper
将BLOB存储到Android的SQLite中


我的类型为
InputStream

SQLite的BLOB不支持流式BLOB或CLOB数据。您有四种选择:

  • 将InputStream转换为字节[]。只有当你有足够的内存时,这才有效(见下文)
  • 使用FileOutputStream或支持流的Android API
  • 将数据分成小块,然后存储在SQLite中
  • 使用在Android上工作并支持流媒体的数据库。我只知道这个。但是请注意,Android对H2的支持是非常新的。在这种情况下,您需要使用JDBCAPI,并且可能希望启用,否则每个大BLOB都存储在单独的文件中
要将InputStream转换为字节数组,可以使用:

public static byte[] readBytesAndClose(InputStream in) throws IOException {
    try {
        int block = 4 * 1024;
        ByteArrayOutputStream out = new ByteArrayOutputStream(block);
        byte[] buff = new byte[block];
        while (true) {
            int len = in.read(buff, 0, block);
            if (len < 0) {
                break;
            }
            out.write(buff, 0, len);
        }
        return out.toByteArray();
    } finally {
        in.close();
    }
}
publicstaticbyte[]readBytesAndClose(InputStream-in)抛出IOException{
试一试{
整数块=4*1024;
ByteArrayOutputStream out=新的ByteArrayOutputStream(块);
字节[]buff=新字节[块];
while(true){
int len=in.read(buff,0,块);
if(len<0){
打破
}
out.write(buff,0,len);
}
return out.toByteArray();
}最后{
in.close();
}
}

我是否可以将其转换为字节[],然后将其存储在BLOB中?当然,您可以将InputStream转换为字节[],但前提是字节数组实际上适合内存。让我为它添加代码。