【发布时间】:2013-01-30 15:51:27
【问题描述】:
在我的 Netty 代码中,我正在编写一个 FrameDecoder 来处理 LDAP PDU。我有代码可以让我确定 PDU 是否完整(状态为 PDU_DECODED)或是否需要更多数据(VALUE_STATE_PENDING)。此外,我还可以检测到更多错误情况。
在大多数情况下,我认为一次读取将获得整个 PDU。但是对于那些需要再次读取以获取更多数据的时候,我想知道最好的编码方式。
现在在我的decode() 中,我正在标记阅读器索引buf.markReaderInded(),读取可用字节,检查读取的字节以查看它是否是有效的 PDU。如果是,我返回读取的字节。如果不是,那么我重置阅读器索引buf.resetReaderIndex(),并返回 null。下次我回到decode() 时,我将获得原始数据加上下一次读取的数据。我可以再次运行检查。
但我想存储第一次读取的原始数据,并在下一次读取时获取 PDU 的其余部分(或下一部分)。然后我会将该数据添加到我已经存储在我的帧解码器实例中的数据中,并检查它是否是有效的 PDU。这一次我不会对读者索引buf.resetReaderIndex() 进行重置,而是返回一个空值。
顺便说一句,我已经在使用setAttachment()/getAttachment()将信息存储在ChannelHandlerContext中。所以我不能用那个。我在连接时设置它。
当我再次回到 decode() 时,我不确定自己处于什么状态。它是我的FrameDecoder 类的同一个实例还是新实例?我可以在可用之前定义和设置变量吗?我不确定 Netty 在这里做什么。
谢谢。
【问题讨论】:
标签: netty