FAST协议是一个国际标准的用于金融信息交换的协议,像国内沪深市场的行情快照信息就是通过FAST协议压缩并进行传输的。
其余介绍也就不多说了,一般人闲着没事也不会去了解这个协议。
FAST协议文档英文原版
FAST协议文档中文翻译

模板文件

FAST协议无论是解码还是编码都需要有模板,并且编解码的模板需要统一。模板文件是一个xml格式的文本文件,里面包含了多个模板
https://static.xuanyu.li/template.xml

这是一个完整模板文件的一部分,节选这部分是因为数据类型和操作符比较齐全,数据类型包含了string、byteVector、uInt64、decimal、sequence,操作符包含了copy、tail、default、delta。下面FAST二进制流也会基于这个模板。

PMAP

PMAP全称presence map,叫做占位图或者存在图。位于FAST二进制数据流的头部,用来标识模板里的某个字段是否在FAST流中出现,但并不是每个字段都需要在PMAP中标明是否出现,需要根据presence值和操作符两者才能判断该字段是否在PMAP中占位,另外有一点是模板ID是一定占位的,具体规则如下:

是否占用PMAP位元
操作符必须optional可选
不占用不占用
constant不占用占用
copy占用占用
default占用占用
delta不占用不占用
increment占用占用
tail占用占用

像下面这样

1
2
3
<byteVector id="55" name="Symbol" presence="optional">
<default/>
</byteVector>

字段id为55,名称是Symbol,操作符为default,在PMAP中占位。
另外对于sequence重复组类型,每个重复组都会有自己单独的PMAP,用来标识重复组内的字段是否出现。