开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 29966|回复: 179
收起左侧

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

  [复制链接]
结帖率:100% (1/1)
发表于 2018-10-13 15:25:26 | 显示全部楼层 |阅读模式   广东省广州市
分享源码
界面截图:
是否带模块: 纯源码
备注说明: -
本帖最后由 L1yp 于 2018-10-13 15:42 编辑

前言:

           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,如下图

          Unprotobuf.png


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

          unProtobufToE.png


          ③组包

          Protobuf.png

          欢迎加入ELib一起讨论:547525064

          protobuf.rar (751.76 KB, 下载次数: 1011)

点评

你的群都爆掉多久了,还没新群吗   广东省汕头市  发表于 2022-10-23 00:19
本帖只接受对protobuf和本源码有所了解的人提出的建议。   广西壮族自治区南宁市  发表于 2018-10-22 10:44
太高级了!!!!!!膜拜大神   江西省上饶市  发表于 2018-10-13 20:37

评分

参与人数 12好评 +10 精币 +39 收起 理由
乐枫i + 1 + 2 感谢分享,很给力!~
hatsunemiku + 1 + 2 支持开源~!感谢分享
zl2017 + 1 + 2 感谢分享,很给力!~
八级大哥王 + 1 支持开源~!感谢分享
人气猫 + 1 + 2 支持。。。。。
sswockssw + 1 论坛搜索"pb"就有了,傻瓜式全节点解析和生成
一一一2 + 1 用来做什么的?
羽傲天 + 1 + 2 是你!!!!!!!!!!!!
镇坛道德标杆 + 1 + 3 /q
熊猫巴布 + 1 + 2 支持开源~!感谢分享
冰点 + 1 + 20 感谢发布原创作品,精易因你更精彩!
流星暴雨 + 1 + 2 /强

查看全部评分


本帖被以下淘专辑推荐:

结帖率:100% (1/1)
 楼主| 发表于 2018-10-15 01:52:03 | 显示全部楼层   广东省广州市
protobuf.rar (753.02 KB, 下载次数: 604)
回复 支持 反对

使用道具 举报

结帖率:0% (0/2)
发表于 2024-11-13 23:23:17 | 显示全部楼层   河南省周口市

优秀给你点个赞
回复 支持 反对

使用道具 举报

结帖率:0% (0/2)
发表于 2024-11-13 23:20:25 | 显示全部楼层   河南省周口市
      感谢分享,很给力!
回复 支持 反对

使用道具 举报

签到天数: 2 天

发表于 2024-10-29 00:15:14 | 显示全部楼层   贵州省安顺市
aasdasdas123123
回复 支持 反对

使用道具 举报

签到天数: 6 天

发表于 2024-9-4 15:53:19 | 显示全部楼层   四川省成都市
比较频繁  懒得发论坛了
回复 支持 反对

使用道具 举报

发表于 2024-9-3 17:02:49 | 显示全部楼层   广东省广州市
666666666666
回复 支持 反对

使用道具 举报

结帖率:43% (10/23)

签到天数: 2 天

发表于 2024-7-11 19:20:46 高大上手机用户 | 显示全部楼层   福建省泉州市
优秀给你点个赞
回复 支持 反对

使用道具 举报

签到天数: 4 天

发表于 2024-4-27 13:38:47 | 显示全部楼层   浙江省杭州市
优秀给你点个赞
回复 支持 反对

使用道具 举报

发表于 2024-2-24 22:38:26 | 显示全部楼层   美国
速度不错哦,楼主可以开源吗
回复 支持 反对

使用道具 举报

结帖率:0% (0/2)

签到天数: 9 天

发表于 2024-2-10 12:29:43 | 显示全部楼层   山西省大同市
下载看看
回复 支持 反对

使用道具 举报

签到天数: 11 天

发表于 2024-1-29 22:04:16 | 显示全部楼层   福建省泉州市
感谢分享
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表