带多字节定界符的Netty 4字节消息解码器
在我的Netty 3.x FrameDecoder实现中,我使用ChannelBufferIndexFinder来帮助我找到FIX()消息之间的分隔符。分隔符定义为一系列字符。为了找到分隔符,我在ChannelBufferIndexFinder的实现中使用了ChannelBuffer.indexOf()方法 ChannelBufferIndexFinder在ChannelBuffer中传递,因此我能够检查缓冲区中其他字节的分隔符 对于Netty 4.x,ByteBuf.indexOf()只允许搜索单个字节。或者,也有ByteBuf.forEachByte(ByteBufProcessor),但是ByteBufProcessor再次只允许我访问单个字节 有办法找到我的分隔符吗?我猜目前我唯一的解决方案是推出我自己的等效版本的ByteBuf.forEachByte(),它跨越多个字节?类似DelimiterBasedFrameDecoder.indexOf()所做的事情带多字节定界符的Netty 4字节消息解码器,netty,Netty,在我的Netty 3.x FrameDecoder实现中,我使用ChannelBufferIndexFinder来帮助我找到FIX()消息之间的分隔符。分隔符定义为一系列字符。为了找到分隔符,我在ChannelBufferIndexFinder的实现中使用了ChannelBuffer.indexOf()方法 ChannelBufferIndexFinder在ChannelBuffer中传递,因此我能够检查缓冲区中其他字节的分隔符 对于Netty 4.x,ByteBuf.indexOf()只允许搜
谢谢 您可以将
io.netty.handler.codec.DelimiterBasedFrameDecoder
与包含一系列字符的io.netty.buffer.ByteBuf
一起使用
已弃用
您可以将自己的io.netty.buffer.ByteBuffindexFinder实现与
@Override
public boolean find(final ByteBuf buffer, final int index) {
boolean found;
if (validateIndex(buffer, index)
&& sufficentBytesReadable(buffer, index)) {
final byte byte0 = buffer.getByte(index);
final byte byte1 = buffer.getByte(index + 1);
found = byte0 == '\r' && byte1 == '\n';
} else {
found = false;
}
return found;
}
private boolean sufficentBytesReadable(final ByteBuf buffer,
final int index) {
return buffer.writerIndex() - index >= 2;
}
private boolean validateIndex(final ByteBuf buffer, final int index) {
return index >= buffer.readerIndex() && index <= buffer.writerIndex();
}
@覆盖
公共布尔查找(最终ByteBuf缓冲区,最终int索引){
布尔发现;
if(validateIndex(缓冲区、索引)
&&足够字节可读(缓冲区、索引)){
最终字节字节0=buffer.getByte(索引);
最终字节字节1=buffer.getByte(索引+1);
发现=字节0='\r'&字节1=='\n';
}否则{
发现=错误;
}
发现退货;
}
专用布尔值足够字节可读(最终字节缓冲区,
最终整数索引){
返回buffer.writerIndex()-index>=2;
}
私有布尔validateIndex(最终ByteBuf缓冲区,最终int索引){
return index>=buffer.readerIndex()&&index据我所知,ByteBuffindexfinder已被删除。很抱歉,我上次在预最终版本中使用了它。