0

現在のコードでは、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);
    }
}
4

1 に答える 1

0

ユーザーが自分で設定したマークを破棄する可能性があるため、これは悪い考えです。

于 2012-07-11T07:46:47.140 に答える