2012-10-14 29 views
0

我已經爲我的framedecoder下面的代碼:了Netty 3.5.8決賽 - 幫助的FrameDecoder

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; 
} 

一切都會罰款,直至int length = Integer.parseInt(hexToASCII(lengthBuilder.toString()));線。在該行之後,解碼器仍然可以讀取剩餘的字節,但現在使用實際的消息作爲生成解析異常錯誤的長度字段。

說,我的消息B0005EHELLO其中[B is the header] [0005 - actual message length] [E - header 2] [HELLO - actual message] ..解析長度字段爲整數值後,解碼器使用的實際消息HELL的頭四個字母來解析長度字段和正在產生異常。請幫助我解決這個問題。

回答

0

通過改變readerIndex修正了4至5

channelBuffer.readerIndex(4);

我也返回結果,這樣它會讀取整個消息,不只是實際的消息之前增加了一個讀卡器指數復位:)

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