SQLite не поддерживает потоковую передачу данных BLOB или CLOB.У вас есть четыре варианта:
- Преобразовать InputStream в байт [].Это будет работать, только если у вас достаточно памяти (см. Ниже).
- Используйте FileOutputStream или Android API, который поддерживает потоковую передачу
- Разделите данные на небольшие блоки и сохраните их в SQLite
- Используйте базу данных, которая работает на Android и поддерживает потоковую передачу.Я знаю только базу данных H2 .Но учтите, что поддержка Android для H2 очень нова.В этом случае вам нужно использовать API JDBC, и вы, вероятно, захотите включить больших объектов в базе данных , в противном случае каждый большой большой двоичный объект хранится в отдельном файле.
Комупреобразовать 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();
}
}