易语言实地培训长期招生 QQ1615457736

乐易论坛

 找回密码
 立即注册

微信登录

微信扫码,快速开始

QQ登录

用QQ账号登陆

导航
导航
培训
培训
产品
产品
易语言第5期实地培训火热招生TQApiEc---专为PCQQ/TIM 开发的API接口模块,让你直接调用内部功能WxApiEc-专为PCWx开发的API接口模块,让你快速调用内部功能
易语言第5期实地培训火热招生TQApiEc---专为PCQQ/TIM 开发的API接口模块,让你直接调用内部功能WxApiEc-专为PCWx开发的API接口模块,让你快速调用内部功能
易语言第5期实地培训火热招生TQApiEc---专为PCQQ/TIM 开发的API接口模块,让你直接调用内部功能WxApiEc-专为PCWx开发的API接口模块,让你快速调用内部功能
易歪歪客服聊天助手——永久免费易歪歪客服聊天助手——永久免费易歪歪客服聊天助手——永久免费
广告位招租广告位招租广告位招租
云课堂动态
查看: 6109|回复: 9
收起左侧

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

[复制链接]
  • TA的每日心情

    5 小时前
  • 签到天数: 924 天

    [LV.10]以坛为家III

    发表于 2018-10-14 08:30:53 | 显示全部楼层 |阅读模式

    乐易编程网免费注册!抓住机会哦!

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    前言:
    ; ~$ w) H8 C# V/ l4 K! J: q/ s9 m' \( ~) `
               Protobuf解析目前圈子没见过一个能[一次解析全部节点]的模块(类似protoc.exe --decode_raw),一般都是解析最外一层,用过Protobuf的童鞋可能知道,在面对嵌套多层并节点很多的情况下,可能会有多层循环和很多个判断,我觉得这种写法极其恶心,所以我在想能不能像Json解析那样,一次解析完全部节点,然后想取哪个就哪个,也不用多次解析.
    2 s. F1 P) W' b' s           Protobuf生成也没见过一个好用的,谷歌的不知道怎么生成的,目前见到的都是复制很多次的打包,如果嵌套5层 最内层了10000字节,想象一下要拷贝几次,每次拷贝多大的内存.
    + j+ N. j& i5 t" @' U& |

    % F) `& _. U  |# U) m: g
    $ z& f7 M* ^% E9 \' }思路:" K7 V4 L9 O# u  c
    & ]6 H, w5 N& D6 m
              解析思路:首先想到的是Protobuf结构可以用理解为树结构,这样就可以把个个节点保存在树上7 ^" p& h# L  N# O' p

    9 N: k; M0 s, W) }6 d  x2 w          生成思路:首先构造一棵树,然后计算所有类型为Length_delimited(2)的长度字段,然后就可以通过中序遍历树来打包protobuf结构,避免了多次复制内存." g9 ^  G/ z2 Y+ `, J5 [

    * d# r1 F  |, r9 |0 T
    4 p6 v+ m; ]0 k  f# \1 ~1 @* q: T
    实现:( ]$ o/ l. _8 G1 ]" l
    3 f- N* o( v9 J* l- {
              首先Protobuf结构肯定是key-value-key-value...key-value
    % S% S0 y) z2 z7 E% N  l7 i
    # n( m8 v& u* u0 y9 `             ①如果类型是Varint(0),那么key-value对应的就是varint-varint
    0 I' K9 R* K, A; X2 |1 a5 ?& W6 E- u" t
                 ②如果是类型Length_delimited(2),对应的就是varint-varint(valueLen)-value
    ' S& h9 Z( @9 n+ Z/ a# H5 b9 F0 F, f# ?/ |
                 ③其他类型和Varint类型类似2 S4 U- _/ j! _; ?6 M
    : f% P/ C5 T( q: V
              说不清楚的,略过. W# Z) z. ?& C) F
    6 i- ^7 ^1 s6 r1 e! B6 _6 R( P
    % v( Z7 E& S- d) @3 d8 }

    4 f  t1 q$ d9 O2 H4 {使用:8 m5 f: |- \) ?" _1 j( f
    8 a) v% K' A  {+ r
              ①解析Protobuf,如下图
    ' P% a" P# }1 T! L% V  o8 e
    * f2 k" B' c$ I0 o, U7 p) W
              124_807611_a09b2b31ff0e4fb.jpg
    - d) K' [" g/ k) a- t, s7 _: n4 ?, ~# `) d3 E  M/ v
    ②生成易语言代码,如下图
    ( N$ D  o6 i! n/ T
      u9 _; r2 s* X3 ^
    ( _# w6 {9 |( x3 z+ b          124_807611_b319d8827fbb3e3.jpg 9 [& A& X* `" p2 R+ Z# k- [
    & ^7 `7 Y. V' w* n1 k% A3 ]. V
    + V* M, d& j7 |5 v) Z. p& o
            ③组包
    , G9 {) J. f& A! |# [7 O 124_807611_c06df6076a82d72.jpg 5 |' y; b9 ^4 I7 _+ }) B
    protobuf.rar (751.76 KB, 下载次数: 20)
    易语言实地培训,报名联系QQ 1615457736
    [超强]《易语言软件加密(防破解)技术特训》
    回复

    使用道具 举报

  • TA的每日心情
    郁闷
    2018-11-11 14:17
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2018-11-10 21:01:57 | 显示全部楼层
    谢谢分享11111111111111111
    易语言实地培训,报名联系QQ 1615457736
    [超强]《易语言软件加密(防破解)技术特训》
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2018-11-10 21:26
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    发表于 2018-11-11 13:06:51 | 显示全部楼层
    下载来学习学习
    易语言实地培训,报名联系QQ 1615457736
    [超强]《易语言软件加密(防破解)技术特训》
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2018-11-10 21:26
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    发表于 2018-11-12 23:58:53 | 显示全部楼层

    2 @% U+ ^9 J% o/ ^, v6 {非常感谢,回复发布成功,现在将转入主题页,请稍候……点击这里转入主题列表
    易语言实地培训,报名联系QQ 1615457736
    [超强]《易语言软件加密(防破解)技术特训》
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2018-11-8 13:04
  • 签到天数: 14 天

    [LV.3]偶尔看看II

    发表于 2018-11-23 13:25:24 | 显示全部楼层

    1 e) k0 j# y4 W) V9 J7 j# \" P9 o下载来研究下. y% V: E0 H4 p1 c
    下载来研究下& V+ X) s) C6 X8 P
    下载来研究下/ m4 u& Q8 V% K- h/ s
    下载来研究下( \, U( h& k' r5 E- V8 w
    下载来研究下! j/ V' b/ U1 A# y2 b5 [
    下载来研究下
    ' v' W. P; ^: o$ ~4 }5 P下载来研究下; a, C* {. ?# C% s
    下载来研究下
    易语言实地培训,报名联系QQ 1615457736
    [超强]《易语言软件加密(防破解)技术特训》
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-1-1 02:48
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2018-11-24 03:56:01 | 显示全部楼层
    没币下载,先留名
    易语言实地培训,报名联系QQ 1615457736
    [超强]《易语言软件加密(防破解)技术特训》
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2018-12-8 15:59:35 | 显示全部楼层
    欢迎加入乐易论坛VIP,报名联系QQ 43989835
    易语言实地培训,报名联系QQ 1615457736
    [超强]《易语言软件加密(防破解)技术特训》
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2018-12-8 16:00:14 | 显示全部楼层
    下载来研究下
    " ]9 }% z1 A2 a9 e下载来研究下
    易语言实地培训,报名联系QQ 1615457736
    [超强]《易语言软件加密(防破解)技术特训》
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2018-12-8 16:00:44 | 显示全部楼层
    下载来研究下
    " R* U; t2 g6 v+ x下载来研究下
    易语言实地培训,报名联系QQ 1615457736
    [超强]《易语言软件加密(防破解)技术特训》
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2018-12-8 16:01:26 | 显示全部楼层
    下载来研究下
    1 e* }. a) F8 |  z' d下载来研究下
    易语言实地培训,报名联系QQ 1615457736
    [超强]《易语言软件加密(防破解)技术特训》
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

    乐易推荐上一条 /6 下一条

    QQ|网站地图|Archiver|手机版|小黑屋|乐易论坛 ( 湘ICP备19007035号-2 )

    GMT+8, 2020-5-30 19:21 , Processed in 0.060395 second(s), 118 queries .

    Powered by Discuz! X3.4 Licensed

    © 2001-2017 Comsenz Inc.

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