FAST 协议解析 (一) 一个最简单的FAST编解码例子

 废话

能搜到的文档,比我头发还少,有个OpenFast的包是专门解析这玩意的(C++的是QuickFast),但是官网都打不开了,搜又全是风力发电模拟的玩意(也是叫OpenFast这个名字)。

甚至我下载到了一个OpenFast的源码+包+文档,我都无法确定这玩意是不是我要的东西,反正就是令人头大头秃。

通俗理解

FAST协议,详情可以查看《FAST 1.1 规范中文版全文参考》,推荐还是看一下吧,就算不需要懂原理,但想要知道支持哪几种类型也总得翻翻书不是。

通俗点的说法,就是打包解包,可以理解为一个快速的压缩解压算法,或者俗称序列化。如果你用Json字符串,就会有很多的符号冗余之类的问题,哪怕用get请求的那种传值方式,都会是长长的一条字符串,数据量大的时候就会产生流量、带宽、延迟之类的问题,最优解当然是一个字节8位,第一位是0代表啥,1代表啥,第二位0代表啥1代表啥,但是这种方式的可扩展姓比较低,协议成本也比较高。

FAST的主要就是根据类型模板,将一个对象转成一条字符串并且对这个字符串压缩成一个二进制的流,反正就是那么个意思。

程序包

openfast-1.1.2-bin.zip

下载地址:OpenFAST - Browse /openfast4j at SourceForge.net

解压之后,自带文档,就是这个文档有点一言难尽……

openfast-1.1.2-bin\openfast-1.1.2\docs\api\index.html

maven1.1.1版本

<dependency>
    <groupId>org.openfast</groupId>
    <artifactId>openfast</artifactId>
    <version>1.1.1</version>
</dependency>

开搞

1、流程

(1)模板(MessageTemplate),其实就是定义有些字段、啥类型,不想写死在代码层,可以写成配置文件,比较友好的是xml文件,不怕麻烦,你也可以自己搞个json文件、yml文件之类的。

(2)上下文(Context),一个编码/解码器一个,不要公用。

(3)编码(FastEncoder)

(4)解码(FastDecoder)

集齐这几样,搞一个最简单的编码解码应该是没啥问题了。

2、直接开搞

        //模板
        MessageTemplate template = new MessageTemplate("",
                new Field[] {
                        new Scalar("1", Type.I32, Operator.COPY, ScalarValue.UNDEFINED, false),
                        new Scalar("2", Type.I32, Operator.DELTA, ScalarValue.UNDEFINED, false),
                });

        //上下文
        Context context = new Context();
        //注册模板
        context.registerTemplate(113, template);
        //编码器
        FastEncoder encoder = new FastEncoder(context);
        Message message = new Message(template);
        message.setInteger(1, 109);
        message.setInteger(2, 29470);
        //编码
        byte[] outByte=encoder.encode(message);

        InputStream sbs = new ByteArrayInputStream(outByte);
        //解码器
        FastDecoder fastDecoder=new FastDecoder(context,sbs);
        //解码
        Message msg111=fastDecoder.readMessage();
        log.info("解码的消息1:{}",msg111.getInt(1));
        log.info("解码的消息2:{}",msg111.getInt(2));

最后运行结果:

解码的消息1:109
解码的消息2:58940

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值