0

tcp nettyクライアントのFrameDecoder.decode()のコーディングで問題が発生しています。

protected Object decode(ChannelHandlerContext ctx, Channel channel,
        ChannelBuffer buffer) throws Exception {

上記の署名では、バッファにはフレーム化する必要のあるバイトが含まれているはずです。しかし、なぜオブジェクトを返す必要があるのでしょうか。返されたオブジェクトがnullの場合、これはこのバッファにさらに多くのデータが必要であることを示していますが、部分フレームの未読バイトを含むバッファを返すとどうなりますか?これは、より多くのバイトが追加された状態で呼び出されますか?

の特定の呼び出しにdecode()100バイトのバッファがあるとします。この100のうち、25バイトと55バイトの2つの完全なフレームと、20バイトの部分的なフレームがあります。最初のフルフレーム(25バイト)を読み取ってバッファ(75バイトを含む-55バイトのフルフレーム1つと部分フレームの別の20バイト)を返すことはできますか?これにより、次にデコードが呼び出されたときにバイトが上書きされますか?または、次の呼び出しで次のフレーム(55バイト)を読み取っても大丈夫ですか?

4

1 に答える 1

1

デコードの各呼び出しごとに 1 つのフレームを返します。FrameDecoder は、null が返されるまで、読み取りフレームの読み取りと転送を続けます。FrameDecoder に残っているバイトは保存され、新しい ChannelBuffer が受信されると両方がマージされ、FrameDecoders の decode(..) メソッドが再度呼び出されます。

于 2012-06-11T17:59:05.150 に答える