Rx java 基于内容的RxJava可观察缓冲区

Rx java 基于内容的RxJava可观察缓冲区,rx-java,observable,Rx Java,Observable,我开始了一个使用vertX和RxJava的项目,我遇到了一个我没有找到解决方案的问题 我有一个可观测的发射WebSocketFrame来接收通讯, 每个WebSocketFrame都由一个有效负载(ByteBuffer)和指示它是消息的第一帧还是最后一帧的标志组成 我想对这个可观测对象进行一个操作,将其转换为一个可观测对象,该可观测对象发出ByteBufferd,包含每条消息的所有帧 我尝试了buffer方法,但它似乎被设计成根据任意标准(时间或其他可观察值)重新组合项目 另一种方法似乎是使用c

我开始了一个使用vertX和RxJava的项目,我遇到了一个我没有找到解决方案的问题

我有一个可观测的发射WebSocketFrame来接收通讯, 每个WebSocketFrame都由一个有效负载(ByteBuffer)和指示它是消息的第一帧还是最后一帧的标志组成

我想对这个可观测对象进行一个操作,将其转换为一个可观测对象,该可观测对象发出ByteBufferd,包含每条消息的所有帧

我尝试了
buffer
方法,但它似乎被设计成根据任意标准(时间或其他可观察值)重新组合项目

另一种方法似乎是使用
compose
订阅WebSocketFrame可观测值,在非结束帧上添加缓冲区,并在结束帧上“馈送”ByteBuffer可观测值。但我不知道如何手动创建和提供缓冲区

因此,如果有人已经看到了这个问题(IMHO似乎很常见),并且对RxJava有足够的了解,能够提出一个实现方案,我将不胜感激


谢谢您的阅读。

我想您必须使用运算符(也许您可以使用更简单的,但我不确定)。有关更多的讨论,请参见涵盖大致相同主题的内容。希望这对你有帮助

回答得很好,我已经实现了大部分功能,但是我仍然有一个问题。closingObservable首先得到发布者的通知,而我需要在缓冲区发出之前添加该项(我不能等待下一帧发出上一条消息),经过多次尝试,我找到了一个解决方案。问题来自于缓冲区,它在从生产者订阅之前订阅关闭的可观察对象。我的解决方案是将
.delaySubscription(1,TimeUnit.NANOSECONDS)
链接到closing observable以强制在之后订阅,并因此在之后接收通知。相关(如果您需要跟踪状态,即基于跨多个发射项的内容的缓冲区):