我想处理“xx bytecount sid newline payload”和“xx 000 sid newline”类型的消息。我正在使用字符串编码器和解码器。不幸的是,这与第一个不匹配。我知道我可以编写自定义解码器并创建动态缓冲区并继续注入数据,直到我满足有效负载的字节数。但是,如果我的自定义编码器成功命中,如何跳过字符串编码器和解码器。
还有一个问题。如何读取自定义解码器中剩余的计数字节数。假设我能够读取计数如何将其设置为状态变量以读取更多数据
答案 0 :(得分:3)
如果我是你,我只会编写一个解码两种消息类型的解码器。如果你坚持要在管道中保留多个解码器,你也可以这样做。
首先,将解码第一个消息类型(xxx bytecount ...)的解码器插入管道。
其次,编程解码器在遇到第二种消息类型时不会弹出。对于它不理解的消息类型,使其只是将消息转发给下一个处理程序。然后解码第二种消息类型的第二个解码器将解码它。
第三,编程解码第二消息类型(xxx 000 ...)的第二解码器检查所接收的消息是否是由第一解码器解码的消息。如果是这样,第二个解码器应该逐字地将消息转发给下一个处理程序。