1

像 FAST 这样的数据编码协议非常巧妙地减少了需要发送的数据量。基本上一个得到一个 char*,将前几个字节作为整数读取会给你一个 id 号,它指向你如何解码其余字节的指令(即它告诉你其余的字节是,例如,reverseivley an int,一个字符串、一个无符号整数、另一个无符号整数、一个嵌套消息等)和接下来的几个字节(在每一位中)告诉你后续字段是否存在。每个字节中的第 8 位保留用于表示数据之间的边界。

如果没有位操作(ands、ors、移位、位检查)的线性遍历,解码这样的协议似乎是不可能的……有没有办法更快地做到这一点?

4

2 回答 2

2

我认为您不会找到比刚才描述的更快的技术或方法。此类协议旨在按顺序解析它们。继续搜索的唯一原因是找到一种更方便的数据处理方式。

据我所知,有以下三种方式:

于 2012-06-09T04:47:52.583 回答
1

如果没有位操作(ands、ors、移位、位检查)的线性遍历,解码这样的协议似乎是不可能的……有没有办法更快地做到这一点?

FAST 协议使用停止位方法对值进行编码,换句话说,它按顺序逐字节解析,直到遇到第 8 位设置为 1 的字节。这样做会在每个字节中丢失一点,但总体而言,它是编码许多不同字段的快速方法,而无需在它们之间使用分隔符字节。

看看这篇关于CoralFIX的 FAST 支持的文章。它有一个从交换 XML 模板文件生成的 FAST 解码器的 Java 代码示例。

免责声明:我是 CoralFIX 的开发者之一。

于 2014-10-21T21:17:37.257 回答