我是比较新手的协程使用者,因此想请教一下您的意见。
我创建了一个扩展函数来读取InputStream
中的数据:
suspend fun InputStream.readData(): ByteArray {
return withContext(Dispatchers.IO) {
while (available() == 0) {
delay(10)
}
val count = available()
val buffer = ByteArray(count)
read(buffer, 0, count)
return@withContext buffer
}
}
你认为从协程的角度来看,有什么可以改进的地方吗?
withTimeout
子句中使用发布的代码,这就是为什么需要延迟10毫秒的原因。 - Krokodylowyavailable()
机制在任何情况下都是无用的。它从未对我起过作用,而且我尝试了多次。您应该使用非阻塞网络IO并在“Main”调度程序中运行。 - Marko TopolnikinputStream
。在我的情况下,我将一直读取,直到找到我感兴趣的信息(或读取超时)。不会一直读取直到套接字关闭。 此外,根据文档,available()
返回的数字不会阻塞读取操作。 - Krokodylowy