現在のコードでは、resetReaderIndex()
さらにデータを待つために呼び出す前に、の子クラスのmarkReaderIndex()
最初の行で呼び出す必要があります。decode()
FrameDecoder
「<<<<<」でマークされているように、cumulation.markReaderIndex();
前Object frame = decode(context, channel, cumulation);
に挿入していただけますか? FrameDecoder.java
初心者にとっては便利で重要です。ありがとう:
//org.jboss.netty.handler.codec.frame.FrameDecoder.java:
private void callDecode(
ChannelHandlerContext context, Channel channel,
ChannelBuffer cumulation, SocketAddress remoteAddress) throws Exception {
while (cumulation.readable()) {
int oldReaderIndex = cumulation.readerIndex();
cumulation.markReaderIndex();//WangHongguangAdd20120711<<<<<<<<<<<<
Object frame = decode(context, channel, cumulation);
if (frame == null) {
if (oldReaderIndex == cumulation.readerIndex()) {
// Seems like more data is required.
// Let us wait for the next notification.
break;
} else {
// Previous data has been discarded.
// Probably it is reading on.
continue;
}
...
}
unfoldAndFireMessageReceived(context, remoteAddress, frame);
}
}