Java 如何在netty中添加多个基于分隔符的帧解码器。。。。。。。。。。。。。。。?

Java 如何在netty中添加多个基于分隔符的帧解码器。。。。。。。。。。。。。。。?,java,netty,delimiter,Java,Netty,Delimiter,我正在使用Netty以这种格式获取字符串数据流 string1#st2|st3|st4..|....| 我得到了这类字符串的多个块,它们由\n分隔,我想先分隔这些块,然后是特定的字符串 我的问题是,如果使用基于分隔符的帧解码器,并使用\n作为分隔符,则可以毫无问题地分隔字符串。但是,如果不使用字符串标记器,如何分隔字符串的其余部分。。。。是否有方法添加多个基于分隔符的帧解码器?因为我想首先处理string1中的信息,然后基于该信息处理字符串的其余部分。。。。如果

我正在使用Netty以这种格式获取字符串数据流

               string1#st2|st3|st4..|....| 
我得到了这类字符串的多个块,它们由\n分隔,我想先分隔这些块,然后是特定的字符串

我的问题是,如果使用基于分隔符的帧解码器,并使用\n作为分隔符,则可以毫无问题地分隔字符串。但是,如果不使用字符串标记器,如何分隔字符串的其余部分。。。。是否有方法添加多个基于分隔符的帧解码器?因为我想首先处理string1中的信息,然后基于该信息处理字符串的其余部分。。。。如果我写一个解码器来分隔字符串1,那么如果不使用字符串标记化,就无法分隔字符串的其余部分

Thanx

编辑


是否有办法在通道中保留对象。。就像在servlet上下文对象中一样

您只需将两个(或更多,如果需要)DelimiterBasedFrameDecoder实例添加到您的ChannelPipeline中,就可以做到这一点。只需将以“\n”分隔的一个放在前面,然后添加另一个。这应该就行了。

在netty 5中,您可以直接将定制属性设置到通道中,就像servlet中的上下文一样

使用通道属性,在通过解码器管道持久化分隔的子字符串(可能是格式化的结果)之后,始终可以处理字符串的其余部分


这里有一个可以参考的示例:

是的,我这样做了,它成功了……但问题是我想保留String1,然后对其余部分进行解码。。。问题是,在我放置了一个处理程序来执行string1的任何逻辑之后,很快就不可能放置另一个DelimiterBaseFrameDecoder来解码字符串的其余部分…抱歉,我不明白您的问题。。你能试着更详细地解释一下吗?我想知道的是,如何将DelimiterBasedFrameDecoder放在另一个返回字符串的解码器之后…?DelimiterBasedFrameDecoder在任何情况下都会返回ChannelBuffer。所以我不明白它怎么会返回字符串。无论如何,如果您有一个字符串作为输入,则需要添加另一个OneToonedCoder,将该字符串转换为ChannelBuffer。