Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带多字节定界符的Netty 4字节消息解码器_Netty - Fatal编程技术网

带多字节定界符的Netty 4字节消息解码器

带多字节定界符的Netty 4字节消息解码器,netty,Netty,在我的Netty 3.x FrameDecoder实现中,我使用ChannelBufferIndexFinder来帮助我找到FIX()消息之间的分隔符。分隔符定义为一系列字符。为了找到分隔符,我在ChannelBufferIndexFinder的实现中使用了ChannelBuffer.indexOf()方法 ChannelBufferIndexFinder在ChannelBuffer中传递,因此我能够检查缓冲区中其他字节的分隔符 对于Netty 4.x,ByteBuf.indexOf()只允许搜

在我的Netty 3.x FrameDecoder实现中,我使用ChannelBufferIndexFinder来帮助我找到FIX()消息之间的分隔符。分隔符定义为一系列字符。为了找到分隔符,我在ChannelBufferIndexFinder的实现中使用了ChannelBuffer.indexOf()方法

ChannelBufferIndexFinder在ChannelBuffer中传递,因此我能够检查缓冲区中其他字节的分隔符

对于Netty 4.x,ByteBuf.indexOf()只允许搜索单个字节。或者,也有ByteBuf.forEachByte(ByteBufProcessor),但是ByteBufProcessor再次只允许我访问单个字节

有办法找到我的分隔符吗?我猜目前我唯一的解决方案是推出我自己的等效版本的ByteBuf.forEachByte(),它跨越多个字节?类似DelimiterBasedFrameDecoder.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已被删除。很抱歉,我上次在预最终版本中使用了它。