我有一个无法更改的外部接口:
interface ExternalApi {
fun onDataReceived(data: String)
}
我需要开始使用数据,并将其发送到< code>flow。数据顺序是必须的。我想要一个冷< code >流,但是我找不到一个具有< code>emit函数的冷< code >流版本,所以我使用热< code >流重放设置为最大值作为解决方法。这是我的第一次尝试:
class FlowProblem {
val flow: MutableSharedFlow<String> = MutableSharedFlow(replay = Int.MAX_VALUE)
fun startConsuming() {
object : ExternalApi {
override fun onDataReceived(data: String) {
flow.emit(data)
}
}
}
}
不幸的是,它不起作用,因为 emit
函数是一个挂起的函数。但是,这是一个外部接口,我无法添加挂起修饰符。我也试图做这样的事情:
override fun onDataReceived(data: String) {
val coroutineScope = CoroutineScope(Job())
coroutineScope.launch {
flow.emit(data)
}
}
但对我来说,创建新的协程只是为了让数据流动是有点愚蠢的。我还想知道数据顺序。
我该怎么办?也许流量/通道不适合这里,我应该选择另一个?
感谢IR42,callbackFlow
正是我所需要的。
如何使用Kotlin声明并调用以函数列表为参数的函数。我在单个函数的函数中使用了参数,但是如何在函数列表中使用参数呢? 这个问题展示了如何将一个函数发送给一个函数:Kotlin:如何将一个函数作为参数传递给另一个函数?对于一系列函数,最好的方法是什么?
我有一个关于Spring WebFlux的问题。我想创建一个使用内容类型text/event-stream的反应endpoint。不是生产而是消费。我们的一个服务需要向另一个服务发送大量的小对象,我们认为这样流式传输可能是一个很好的解决方案。 流量是每1秒产生一个值的流。我遇到的问题是,WebClient完全读取发布服务器,然后将数据作为一个整体发送,而不是一个接一个地流式传输。我能用这个客户机或
我试图发送一个包含压缩(gzip)流输出的响应。我当前的代码是: 当我请求这项服务时,我的浏览器中会出现乱七八糟的数据。尽管我的响应正确设置了以下标题,但似乎我遗漏了什么:内容编码:gzip和传输编码:chunked。 在我的单元测试中,如果我提取主体并通过GzipInputStream()读取它,我就能够检索json主体。 当我更换时: 具有 val os=DeflaterOutputStrea
我在VPC中使用AWS Chalice托管了一个Lambda函数,因为我希望它访问一个无服务器的Aurora DB实例。现在,我还希望这个函数将send_message()转换为SQS。
例外情况。kt: 在科特林: 它在kotlin中工作,函数是内联的。 但是当在Java代码中使用时,它就是不能内联,仍然是一个正常的静态方法调用(从反编译的内容中可以看出)。 像这样的东西:
我在Kotlin文件中定义了扩展函数。 其中是(生成的)java类。现在,我想用正常的java代码访问它: 然而,那是行不通的。IDE将无法识别方法,编译失败。