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

乐易论坛

 找回密码
 立即注册

微信登录

微信扫码,快速开始

QQ登录

用QQ账号登陆

导航
导航
培训
培训
产品
产品
易歪歪客服聊天助手——永久免费阿里云服务器最高¥1888云产品通用代金券我要租广告
易歪歪客服聊天助手——永久免费阿里云服务器低至10元/月我要租广告
易歪歪客服聊天助手——永久免费最高2000云产品通用代金券我要租广告
查看: 4808|回复: 9
收起左侧

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

[复制链接]
  • TA的每日心情
    奋斗
    8 小时前
  • 签到天数: 694 天

    [LV.9]以坛为家II

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

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

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

    x
    前言:$ j  I5 x) B6 m# z. Z6 W
    8 ^  r2 j, ~! O$ b" q3 _! N
               Protobuf解析目前圈子没见过一个能[一次解析全部节点]的模块(类似protoc.exe --decode_raw),一般都是解析最外一层,用过Protobuf的童鞋可能知道,在面对嵌套多层并节点很多的情况下,可能会有多层循环和很多个判断,我觉得这种写法极其恶心,所以我在想能不能像Json解析那样,一次解析完全部节点,然后想取哪个就哪个,也不用多次解析.+ L/ j6 i8 T8 `: P5 I
               Protobuf生成也没见过一个好用的,谷歌的不知道怎么生成的,目前见到的都是复制很多次的打包,如果嵌套5层 最内层了10000字节,想象一下要拷贝几次,每次拷贝多大的内存.
    ' v. B; Z/ S: l; i9 [1 h

    ) c9 `/ d* B2 b# P1 }5 N/ O; b1 ~) p+ f6 d9 @
    思路:
    1 x; L3 h3 v, p- w  ~. ]$ H* E/ G/ P/ m+ k2 r8 ?0 Z/ I
              解析思路:首先想到的是Protobuf结构可以用理解为树结构,这样就可以把个个节点保存在树上
    / k3 b4 |! c+ A" Z
    / T& y. n1 k. Q          生成思路:首先构造一棵树,然后计算所有类型为Length_delimited(2)的长度字段,然后就可以通过中序遍历树来打包protobuf结构,避免了多次复制内存.( ]$ J7 n6 ~: ]3 _" \: O; t6 W
    3 q. X5 J; Q! W8 e  ?
    ! Z. }2 |1 s" z. Y

    # U" T! v9 }7 l. r) \; N* |实现:
    , A/ S; v) J# V6 `; W3 u
    ; P, `4 F: \' M$ p! E8 e          首先Protobuf结构肯定是key-value-key-value...key-value
      S. F& s4 Z4 e9 E" M0 F1 ^
    5 w. d4 Q4 M: r7 }9 E- k             ①如果类型是Varint(0),那么key-value对应的就是varint-varint) g* {2 m9 x! F. x3 f
    6 [/ C: G; ^7 s$ T
                 ②如果是类型Length_delimited(2),对应的就是varint-varint(valueLen)-value  ^$ V4 `  N/ j( D, a. h  ~: h! O- A

    4 a; u8 ~- O; K) S             ③其他类型和Varint类型类似, Q' \, A" _2 z2 O& `% Z6 B
    9 Q7 O  r2 x9 `, Y4 Z
              说不清楚的,略过3 d7 p2 Q- O5 z

    $ V* }$ a$ L$ ]7 r7 m9 Z
    & g& f9 g6 K9 {) \) N9 B! ?
    . C% D% x  m3 i( k& v- ]. Q使用:, d1 ]- ?+ c$ E! M+ J

    / O8 ?( y6 D/ L' A$ I$ }( i          ①解析Protobuf,如下图
    , I/ S# E3 a5 C) N, H; \. y4 G# a" C

    ( M  h3 F  ^8 |; i( D          124_807611_a09b2b31ff0e4fb.jpg * U, R( E, E! s7 a9 @

    ! a! T* R, g9 u& y8 _
    ②生成易语言代码,如下图
    ) t8 {: @9 q" z( U# ]; v" M, R! n( R/ P+ _9 n* E# y+ d6 d
    $ P9 I' L2 R1 S/ j
              124_807611_b319d8827fbb3e3.jpg / c4 a: \9 ]' ?  p' W. y- x
    + b% Q! [5 @4 j( `
    " s+ I% j, e7 o# c* w' ^4 a
            ③组包0 L/ J) ]  D% ]" J) x
    124_807611_c06df6076a82d72.jpg
    ) P3 n: ^& o- c- u- d) o$ V, ]
    protobuf.rar (751.76 KB, 下载次数: 15)
    欢迎加入乐易论坛VIP,报名联系QQ 43989835
    VIP介绍和课程安排
    回复

    使用道具 举报

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

    [LV.1]初来乍到

    发表于 2018-11-10 21:01:57 | 显示全部楼层
    谢谢分享11111111111111111
    欢迎加入乐易论坛VIP,报名联系QQ 43989835
    VIP介绍和课程安排
    回复 支持 反对

    使用道具 举报

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

    [LV.2]偶尔看看I

    发表于 2018-11-11 13:06:51 | 显示全部楼层
    下载来学习学习
    欢迎加入乐易论坛VIP,报名联系QQ 43989835
    VIP介绍和课程安排
    回复 支持 反对

    使用道具 举报

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

    [LV.2]偶尔看看I

    发表于 2018-11-12 23:58:53 | 显示全部楼层
    . X/ f" ]4 E8 u8 O
    非常感谢,回复发布成功,现在将转入主题页,请稍候……点击这里转入主题列表
    欢迎加入乐易论坛VIP,报名联系QQ 43989835
    VIP介绍和课程安排
    回复 支持 反对

    使用道具 举报

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

    [LV.3]偶尔看看II

    发表于 2018-11-23 13:25:24 | 显示全部楼层
    % S# E6 k& ]" ?$ O# i9 z2 O$ q
    下载来研究下
    2 P7 D0 s1 R: t下载来研究下
    - [  C$ w% E2 g/ C4 u- Z- q下载来研究下
    ) \  |9 z- L* t, w1 W下载来研究下* O; R, M" M; u  n( n9 S
    下载来研究下# B* s  z: D1 D! |" F/ A
    下载来研究下
    # i5 }7 _( g. m8 A# t- t/ g% ~下载来研究下
      y& Q9 {+ h0 A4 @( _: X下载来研究下
    欢迎加入乐易论坛VIP,报名联系QQ 43989835
    VIP介绍和课程安排
    回复 支持 反对

    使用道具 举报

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

    [LV.1]初来乍到

    发表于 2018-11-24 03:56:01 | 显示全部楼层
    没币下载,先留名
    欢迎加入乐易论坛VIP,报名联系QQ 43989835
    VIP介绍和课程安排
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2018-12-8 15:59:35 | 显示全部楼层
    欢迎加入乐易论坛VIP,报名联系QQ 43989835
    欢迎加入乐易论坛VIP,报名联系QQ 43989835
    VIP介绍和课程安排
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2018-12-8 16:00:14 | 显示全部楼层
    下载来研究下- T, J- k/ [4 W0 ]( q
    下载来研究下
    欢迎加入乐易论坛VIP,报名联系QQ 43989835
    VIP介绍和课程安排
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2018-12-8 16:00:44 | 显示全部楼层
    下载来研究下' |; ]( X9 x3 j
    下载来研究下
    欢迎加入乐易论坛VIP,报名联系QQ 43989835
    VIP介绍和课程安排
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2018-12-8 16:01:26 | 显示全部楼层
    下载来研究下
    2 S: m) _! ~" y, D" Q+ J$ G下载来研究下
    欢迎加入乐易论坛VIP,报名联系QQ 43989835
    VIP介绍和课程安排
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2019-9-17 10:21 , Processed in 0.092090 second(s), 73 queries , Redis On.

    Powered by Discuz! X3.4 Licensed

    © 2001-2017 Comsenz Inc.

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