Корутины, как получить InputStream из Flow>?
В общем получаю из Room Flow<List<ByteArray>>, вопрос как преобразовать его в InputStream?
class FlowListInputStream(
private val scope: CoroutineScope,
private val flow: Flow<List<ByteArray>> //размер списка до нескольких тысяч
): InputStream() {
override fun read(): Int {
//todo...
}
}
Контекст: у меня в SQLite в виде BLOB хранятся video/audio/image - местами довольно большие до гигабайт. Размер записи в районе 1 мб, соответственно я получаю SQL запросом список BLOB сформированных в виде массивов ByteArray, которые согласно последней моде возвращаются в виде асинхронных Flow. Теперь для того, чтобы отобразить media, мне нужно преобразовать в InputStream, который уже можно засунуть в Glide или в MediaPlayer.
Ответы (1 шт):
Автор решения: IR42
→ Ссылка
Оно? Выглядит странно, возможно я чего-то не понял
class FlowListInputStream(
private val flow: Flow<List<ByteArray>> //размер списка до нескольких тысяч
) : InputStream() {
val s by lazy {
val streams = runBlocking { flow.first() }.map { ByteArrayInputStream(it) }
SequenceInputStream(Vector(streams).elements())
}
override fun read(): Int = s.read()
}