易语言资源网 - 做最全的易语言资源下载社区
精易论坛授权登录

非递归解析Protobuf全部节点并自动生成组包代码   [复制链接]

    2018-12-21 10:51:43
    高级教程源码
    易语言资源网
    3445 次浏览
    来源链接

前言:

Protobuf解析目前圈子没见过一个能[一次解析全部节点]的模块(类似protoc.exe --decode_raw),一般都是解析最外一层,用过Protobuf的童鞋可能知道,在面对嵌套多层并节点很多的情况下,可能会有多层循环和很多个判断,我觉得这种写法极其恶心,所以我在想能不能像json解析那样,一次解析完全部节点,然后想取哪个就哪个,也不用多次解析.

Protobuf生成也没见过一个好用的,谷歌的不知道怎么生成的,目前见到的都是复制很多次的打包,如果嵌套5层 最内层了10000字节,想象一下要拷贝几次,每次拷贝多大的内存.


思路:

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

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





点我下载 (已有 248 次下载)

引用模块


源码文件名 模块文件名
Protobuf for e.e
HashTable.ec


引用支持库


源码文件名 支持库文件名 支持库标识
Protobuf for e.e 系统核心支持库 5.7 d09f2340818511d396f6aaf844c7e325
特殊功能支持库 3.1 A512548E76954B6E92C21055517615B0
通用对象支持库 2.0 {A068799B-7551-46b9-8CA8-EEF8357AFEA4}
zyHashTable.e 系统核心支持库 5.7 d09f2340818511d396f6aaf844c7e325
特殊功能支持库 3.1 A512548E76954B6E92C21055517615B0
通用对象支持库 2.0 {A068799B-7551-46b9-8CA8-EEF8357AFEA4}


[错误报告]   上一篇:验证码识别源码...     下一篇:MIDI解析、播放、键盘、展示框、播放器...