Exception Netty 3.5.8-Final-帧解码器帮助

Exception Netty 3.5.8-Final-帧解码器帮助,exception,netty,decoder,Exception,Netty,Decoder,我的帧解码器有以下代码: protected Object decode(ChannelHandlerContext channelHandlerContext, Channel channel, ChannelBuffer channelBuffer) throws Exception { //Header 1 + 4 length bytes if (channelBuffer.readableBytes() < 5) { return

我的帧解码器有以下代码:

protected Object decode(ChannelHandlerContext channelHandlerContext,
        Channel channel, ChannelBuffer channelBuffer) throws Exception {

    //Header 1 + 4 length bytes
    if (channelBuffer.readableBytes() < 5) {
        return null;
    }
    System.out.println(channelBuffer.readerIndex());

    //mark the reader index
    channelBuffer.markReaderIndex();

    //extract the length bytes and convert to an int value 
    //**note: length value of the message is a decimal not hex
    StringBuilder lengthBuilder = new StringBuilder("");
    for (int ctr = 1; ctr < 5; ctr += 1) {
        lengthBuilder.append(String.format("%02x",
                channelBuffer.getByte(ctr)));
    }
    int length = Integer.parseInt(hexToASCII(lengthBuilder.toString()));
    System.out.println("This is the length: " + length);
    System.out.println("reader index: " + channelBuffer.readerIndex());
            channelBuffer.readerIndex(4);

    //get the remaining bytes
    if (channelBuffer.readableBytes() <= length) {
        channelBuffer.resetReaderIndex();
        return null;
    }

    String s = "";
    for (int ctr = 0; ctr < length + 5; ctr += 1) {
        s += (char) channelBuffer.getByte(ctr);
    }

    return s;
}
受保护对象解码(ChannelHandlerContext ChannelHandlerContext,
通道,通道缓冲区(通道缓冲区)引发异常{
//头1+4个长度字节
if(channelBuffer.readableBytes()<5){
返回null;
}
System.out.println(channelBuffer.readerIndex());
//标记读者索引
channelBuffer.markReaderIndex();
//提取长度字节并转换为int值
//**注意:消息的长度值是十进制而不是十六进制
StringBuilder lengthBuilder=新StringBuilder(“”);
对于(int ctr=1;ctr<5;ctr+=1){
lengthBuilder.append(String.format(“%02x”),
channelBuffer.getByte(ctr));
}
int length=Integer.parseInt(hexToASCII(lengthBuilder.toString());
System.out.println(“这是长度:“+length”);
System.out.println(“读卡器索引:+channelBuffer.readerIndex());
channelBuffer.readerIndex(4);
//获取剩余的字节

if(channelBuffer.readableBytes()通过将readerIndex从4更改为5进行修复

channelBuffer.readerIndex(4);

在返回结果之前,我还添加了一个读卡器索引重置,以便它能够读取整个消息,而不仅仅是实际消息:)

channelBuffer.readerIndex(0);
字符串s=“”;
对于(整数中心=0;中心<长度+5;中心+=1){
s+=(char)channelBuffer.getByte(ctr);
}
channelBuffer.readerIndex(0);
String s = "";
for (int ctr = 0; ctr < length + 5; ctr += 1) {
    s += (char) channelBuffer.getByte(ctr);
}