像FAST这样的用于编码数据的协议非常聪明,可以最大限度地减少需要发送的数据量。基本上一个得到一个char *,读取前几个字节作为一个整数给你一个id号,指向你如何解码其余的指令(即它告诉你其余的字节,例如,respectivley一个int,一个字符串,一个unsigned int,另一个unsigned int,一个嵌套的消息等。)接下来的几个字节告诉你(在每一位)后续字段是否存在。保留每个字节中的第8位以表示数据之间的边界。
如果没有位操作的线性遍历(并且,ors,移位,位检查),解码这样的协议似乎是不可能的......有没有办法更快地做到这一点?
答案 0 :(得分:2)
我认为你找不到比刚刚描述的更快的技术或方法。这些协议旨在按顺序解析它们。继续搜索的唯一原因是找到一种更方便的数据处理方式。
据我所知,有三种方法:
答案 1 :(得分:1)
如果没有线性,解码这样的协议似乎是不可能的 位操作的遍历(ands,ors,shift,bit checks)......有没有 这样做的方法更快?
FAST协议使用停止位方法对值进行编码,换句话说,它按顺序逐字节解析,直到它遇到第8位设置为1的字节。在每个字节中丢失一点,但总体而言它是一种快速编码许多不同字段的方法,而不需要在它们之间使用分隔符字节。
从on this article查看有关FAST支持的CoralFIX。它具有从交换XML模板文件生成的FAST解码器的Java代码示例。
免责声明:我是CoralFIX的开发者之一。