为编程爱好者分享易语言教程源码的资源网
好用的代理IP,游戏必备 ____广告位招租____ 服务器99/年 ____广告位招租____ ____广告位招租____ 挂机,建站服务器
好用的代理IP,游戏必备 ____广告位招租____ 服务器低至38/年 ____广告位招租____ ____广告位招租____ 挂机,建站服务器

网站首页 > 易语言相关 > 易语言例程 正文

易语言 纯源码实现 非递归解析Protobuf全部节点并自动生成组包代码

三叶资源网 2019-03-01 12:34:32 易语言例程 2189 ℃ 0 评论

前言:

           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类型类似

@L1yp

文件下载


来源:三叶资源网,欢迎分享,公众号:iisanye,(三叶资源网⑤群:21414575

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

百度站内搜索
关注微信公众号
三叶资源网⑤群:三叶资源网⑤群

网站分类
随机tag
多线程telegram模拟器群控类源码反爆破信息框彗星HTTP支持库宏插件贪吃蛇游戏鼠标自动点击器语法提示校验车辆识别号哈罗单车创建多线程特训班进度复制文件折线图源码FindPath取文件列表LocalStorageCHM帮助文档E2EE分布式任务
最新评论