为Netty FrameDecoder.decode编写代码的最佳方法

时间:2012-06-11 17:49:35

标签: java netty

我遇到了为tcp netty客户端编码FrameDecoder.decode()的问题。

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

在上面的签名中,缓冲区应该包含需要加框的字节。但是为什么必须归还一个obejct?我知道如果返回的对象为null,则表示此缓冲区需要更多数据,但是如果我返回一个包含部分帧的未读字节的缓冲区会发生什么?是否会在添加更多字节的情况下调用它?

让我们说decode()的给定调用有一个包含100个字节的缓冲区。在这100个中,有2个全帧,25个和55个字节,部分帧为20个字节。我可以只读取第一个完整帧(25个字节)并返回缓冲区(其中包含75个字节 - 一个55字节的完整帧和一个部分帧的另外20个字节)?这会导致下次调用解码时是否会覆盖任何字节?或者我可以在下次调用中读取下一帧(55个字节)吗?

1 个答案:

答案 0 :(得分:1)

每次解码调用都会返回一帧。 FrameDecoder将继续读取和转发读取帧,直到返回null。 FrameDecoder中剩下的字节将被保存,一旦收到新的ChannelBuffer,它们将被合并,并且将再次调用FrameDecoders decode(..)方法。