如何替换阻塞代码以在 Kotlin 中读取字节
Posted
技术标签:
【中文标题】如何替换阻塞代码以在 Kotlin 中读取字节【英文标题】:How to replace blocking code for reading bytes in Kotlin 【发布时间】:2019-10-25 06:34:03 【问题描述】:我有 ktor
应用程序,它需要来自 multipart 的文件,代码如下:
multipart.forEachPart part ->
when (part)
is PartData.FileItem ->
image = part.streamProvider().readAllBytes()
else -> // irrelevant
Intellij IDEA 将 readAllBytes()
标记为不适当的阻塞调用,因为 ktor 在协程之上运行。如何将此阻塞调用替换为适当的调用?
【问题讨论】:
【参考方案1】:考虑到 Ktor 作为非阻塞、暂停 IO 框架的声誉,我很惊讶 FileItem
显然除了阻塞 InputStream
API 来检索它之外别无他物。鉴于此,您唯一的选择似乎是委托给 IO 调度程序:
image = withContext(Dispatchers.IO) part.streamProvider().readBytes()
【讨论】:
以上是关于如何替换阻塞代码以在 Kotlin 中读取字节的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Picasso 上启用 TLS v 1.2 以在 Kotlin 中使用 https 加载图像
如何使用 COMMTIMEOUTS 等待字节可用但读取多个字节?
是否合法写入并集中的字节数组并从int读取以在MISRA C中转换值?