揰掵佲 发表于 2018-10-14 08:30:53

易语言 非递归解析Protobuf并自动生成组包代码

前言:

         Protobuf解析目前圈子没见过一个能[一次解析全部节点]的模块(类似protoc.exe --decode_raw),一般都是解析最外一层,用过Protobuf的童鞋可能知道,在面对嵌套多层并节点很多的情况下,可能会有多层循环和很多个判断,我觉得这种写法极其恶心,所以我在想能不能像json解析那样,一次解析完全部节点,然后想取哪个就哪个,也不用多次解析.
         Protobuf生成也没见过一个好用的,谷歌的不知道怎么生成的,目前见到的都是复制很多次的打包,如果嵌套5层 最内层了10000字节,想象一下要拷贝几次,每次拷贝多大的内存.


思路:

          解析思路:首先想到的是Protobuf结构可以用理解为树结构,这样就可以把个个节点保存在树上

          生成思路:首先构造一棵树,然后计算所有类型为Length_delimited(2)的长度字段,然后就可以通过中序遍历树来打包protobuf结构,避免了多次复制内存.



实现:

          首先Protobuf结构肯定是key-value-key-value...key-value

             ①如果类型是Varint(0),那么key-value对应的就是varint-varint

             ②如果是类型Length_delimited(2),对应的就是varint-varint(valueLen)-value

             ③其他类型和Varint类型类似

          说不清楚的,略过



使用:

          ①解析Protobuf,如下图

         

②生成易语言代码,如下图


         


      ③组包



jb136328610 发表于 2018-11-10 21:01:57

谢谢分享11111111111111111

sucody 发表于 2018-11-23 13:25:24


下载来研究下
下载来研究下
下载来研究下
下载来研究下
下载来研究下
下载来研究下
下载来研究下
下载来研究下

lzzolhvjye 发表于 2018-11-24 03:56:01

没币下载,先留名

Asan丶 发表于 2018-12-8 15:59:35

欢迎加入乐易论坛VIP,报名联系QQ 43989835

Asan丶 发表于 2018-12-8 16:00:14

下载来研究下
下载来研究下

Asan丶 发表于 2018-12-8 16:00:44

下载来研究下
下载来研究下

Asan丶 发表于 2018-12-8 16:01:26

下载来研究下
下载来研究下
页: [1]
查看完整版本: 易语言 非递归解析Protobuf并自动生成组包代码