我们正在尝试从TCP读取enOcean数据。
enOcean ESP3消息的协议说明如下:
一旦同步-识别字节(值0x55),随后的4字节头与相应的CRC8H值进行比较。
如果结果匹配,则同步-字节正确。因此,ESP3数据包被正确检测,随后的数据将被传递。
如果标头与CRC8H不匹配,则值0x55不对应于同步-字节将拾取数据流中的下一个0x55,并重复验证。
到目前为止,我们使用的设备(客户端)在很短的时间内(几毫秒)收到大量消息后自动关闭与服务器的连接。因此,我们能够使用简单的ByteArrayRawSerializer。每当连接关闭时,我们都会获得字节数组,读取数据,找到所有同步字节,并能够解释消息。
现在有一种新设备将连接保持很长时间(几分钟),因此我们需要另一种方式从流中读取数据。因为消息字节没有结尾,同步字节0x55是消息的一部分,ByteArrayLengthHeaderSerializer也不适合我们,我们想知道我们可以使用什么:
是否有任何反序列化程序可用于我们的场景?是否可以编写我们自己的反序列化程序(在此特定场景中)?还是我们应该遵循另一种(更简单的)方式?也许使用拦截器?