Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.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时一条信息混乱?_Netty - Fatal编程技术网

为什么我使用netty时一条信息混乱?

为什么我使用netty时一条信息混乱?,netty,Netty,我使用netty 4.1.4.Final 我的留言如下: ~1234567890…AAAA~ 使用“~”将其拆分 日志: 2016-11-16 16:09:44.213-1,HashCode=-1614800617,S1=25,S2=-1,Length=26 2016-11-16 16:09:44.251-1,HashCode=-966536846,S1=25,S2=-1,Length=26 2016-11-16 16:09:44.267-1,HashCode=-989586955**,S1=9

我使用netty 4.1.4.Final
我的留言如下:
~1234567890…AAAA~
使用“~”将其拆分
日志:
2016-11-16 16:09:44.213-1,HashCode=-1614800617,S1=25,S2=-1,Length=26
2016-11-16 16:09:44.251-1,HashCode=-966536846,S1=25,S2=-1,Length=26
2016-11-16 16:09:44.267-1,HashCode=-989586955**,S1=9,S2=-1,Length=10
2016-11-16 16:09:44.358-1,HashCode=450805672,S1=57,S2=1,Length=58
2016-11-16 16:09:44.383-1,HashCode=-1555716066,S1=57,S2=-1,Length=58
2016-11-16 16:09:45.403-3xxx,哈希代码=450805672,S1=0,S2=84,长度=85
2016-11-16 16:09:45.418-3xxx,HashCode=-1555716066,S1=0,S2=84,长度=85
2016-11-16 16:09:45.476-3xxx,HashCode=-1614800617,S1=0,S2=84,长度=85
2016-11-16 16:09:45.481-3xxx,HashCode=-966536846,S1=0,S2=84,长度=85
2016-11-16 16:09:45.496-3xxx,HashCode=-989586955,S1=0,S2=84,长度=85
从日志中,我们可以知道:
第一个事件,变量msg等于“0…AAAA~”
下一个事件,然后变量msg等于“~1234567890…AAAA~”
一条信息混乱,但为什么呢?
公共类MyMessageDecoder扩展MessageToMessageDecoder{
私有最终静态记录器Logger=LogManager.getLogger(BDCompatibleMessageDecoder.class);
public void decode(ChannelHandlerContext ctx、ByteBuf msg、List out)引发异常{
int readableBytes=msg.readableBytes();
int startPosition=msg.indexOf(0,readableBytes,(byte)126);
int endPosition=msg.indexOf(startPosition+1,readableBytes,(byte)126);
MyMessage=null;
如果(结束位置>开始位置+1){
布尔值xxx=ctx.channel().attr(NettyConstant.NETTY_ctx_xxx.get();
如果(xxx!=null&&xxx.equals(Boolean.TRUE)&&startPosition==0){
ctx.channel().attr(NettyConstant.NETTY_ctx_XXX).set(Boolean.FALSE);
LOGGER.info(“3xxx,HashCode=“+ctx.channel().HashCode()+”,startPosition=“+startPosition+”,endPosition=“+endPosition+”,Length=“+readableBytes”);
}
如果(起始位置>0){
LOGGER.info(“2XXXX,HashCode=“+ctx.channel().HashCode()+”,startPosition=“+startPosition+”,endPosition=“+endPosition+”,Length=“+readableBytes”);
}
字节[]转义数据=新字节[endPosition-startPosition+1];
msg.readBytes(转义数据);
//todoSomeThing
}
如果(起始位置>0){
ctx.channel().attr(NettyConstant.NETTY_ctx_XXX).set(Boolean.TRUE);
LOGGER.info(“1,HashCode=“+ctx.channel().HashCode()+”,startPosition=“+startPosition+”,endPosition=“+endPosition+”,Length=“+readableBytes”);
}
如果(消息!=null){
out.add(消息);
}

}
MessageToMessageDecoder假设您正在处理一条已解码的消息作为输入。您应该实现一个


注意,如果没有足够的字节来创建一个消息,注意不要修改读取器索引。也可以考虑在管道中创建一个并添加它。

< P> MessageToMessageDecoder假定您正在处理已经解码的消息作为输入。应该实现一个.< /P> 注意如果你没有足够的字节来创建一个消息,不要修改读取器索引。还要考虑在管道中创建一个并添加它。