我在Netty项目中搜索了很多例子,它们看似简单而且很棒。但是,解码器有一个共同点:它们首先读取一些头,然后事先知道要读取多少字节。
我必须实施更复杂的协议。它是一个像这样构建的专有二进制协议:
+--------+-----------+------------+-------+------------+-------+-----------+
| header | msg_count | msg_type_1 | msg_1 | msg_type_n | msg_n | msg_count |
+--------+-----------+------------+-------+------------+-------+-----------+
11 bytes 1 byte 1 byte bytes 1 byte bytes 1 byte
标题包含序列号。然后是消息计数和n条消息。这些消息的长度各不相同。在传输结束时,消息计数再次被重新编译,并且它是已完成传输的标志。
消息可以有不同的类型。有些类型是固定宽度,但有些类型有所不同,例如: G:
我不知道如何为这种协议实现Netty解码器。这里的主要问题是在我实际解析整个缓冲区之前没有明确的结束迹象 - 消息被解析得很好并且消息计数在最后被重新编译。
Netty中是否有任何机制可以帮我解决这个问题?