Корутины, как получить 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()
}
→ Ссылка