saket
01/08/2024, 8:12 AMokio.Source
from a ByteReadChannel
?Aleksei Tirman [JB]
01/08/2024, 8:51 AMfun ByteReadChannel.toOkioSource(context: CoroutineContext = EmptyCoroutineContext): okio.Source {
val channel = this
return object : okio.Source {
override fun close() {
channel.cancel()
}
override fun read(sink: Buffer, byteCount: Long): Long {
val buffer = ByteBuffer.allocateDirect(4096)
val read = runBlocking(context) { channel.readAvailable(buffer) }
buffer.flip()
sink.write(buffer)
return read.toLong()
}
override fun timeout(): Timeout {
return Timeout()
}
}
}
saket
01/08/2024, 6:34 PMrunBlocking
on every buffer read does not feel great sweating