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

乐易论坛

 找回密码
 立即注册

微信登录

微信扫码,快速开始

QQ登录

用QQ账号登陆

导航
导航
培训
培训
产品
产品
易歪歪客服聊天助手——永久免费
验证码识别/打码平台/谷歌人机验证/
阿里云服务器最高¥1888云产品通用代金券我要租广告
易歪歪客服聊天助手——永久免费各类验证码定制,注册赠送¥588礼包,点击领取阿里云服务器低至10元/月我要租广告
易歪歪客服聊天助手——永久免费接码打码最高2000云产品通用代金券我要租广告
查看: 5060|回复: 9
收起左侧

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

[复制链接]
  • TA的每日心情
    奋斗
    昨天 00:07
  • 签到天数: 753 天

    [LV.10]以坛为家III

    发表于 2018-10-14 08:30:53 | 显示全部楼层 |阅读模式
    前言:
    . j- D& _7 |0 z, r( D& j* ?: z5 A7 A9 H2 P* Z
               Protobuf解析目前圈子没见过一个能[一次解析全部节点]的模块(类似protoc.exe --decode_raw),一般都是解析最外一层,用过Protobuf的童鞋可能知道,在面对嵌套多层并节点很多的情况下,可能会有多层循环和很多个判断,我觉得这种写法极其恶心,所以我在想能不能像Json解析那样,一次解析完全部节点,然后想取哪个就哪个,也不用多次解析.
    & k. S( n: _% P- d* w9 J           Protobuf生成也没见过一个好用的,谷歌的不知道怎么生成的,目前见到的都是复制很多次的打包,如果嵌套5层 最内层了10000字节,想象一下要拷贝几次,每次拷贝多大的内存.

    $ \4 R6 A5 l5 m) L9 ^) A9 |
    3 Z! k9 }1 [$ T
    , {- f+ t" ~( `2 D0 K! R: y+ i思路:6 K& V! v2 A7 }3 Z

    ) p$ O/ O: g% b          解析思路:首先想到的是Protobuf结构可以用理解为树结构,这样就可以把个个节点保存在树上
    * T1 e5 T& V0 o! B  A9 Q! f- c( m# }/ k5 m
              生成思路:首先构造一棵树,然后计算所有类型为Length_delimited(2)的长度字段,然后就可以通过中序遍历树来打包protobuf结构,避免了多次复制内存.
    8 X) V) ?, a8 ^: z. h; _6 \; m9 T, E& b7 `, p% d; G' B& i% F
    / `4 P' Z7 N" M# \, h4 G. r! l

    3 \5 I' H" t. y. P9 W3 T实现:
    : V% B* H2 X" ~+ l1 X/ y
    ' t. w4 ?4 l+ O& O: X          首先Protobuf结构肯定是key-value-key-value...key-value
    , X' P( v" X1 O  J. |( \- L" a
    / Z' l1 Q! S" ]( R             ①如果类型是Varint(0),那么key-value对应的就是varint-varint
    0 Y/ B. ^$ L3 g4 u! s% c% B) T' y; t/ q! O' T* B
                 ②如果是类型Length_delimited(2),对应的就是varint-varint(valueLen)-value
    . k1 k2 L, [* G* o) V  L
    7 b7 J3 U0 z5 \5 H" W, I             ③其他类型和Varint类型类似; d) E9 b3 H2 c/ x7 N8 @- N
    - ~6 d5 V! q  M* U5 t6 x. Q
              说不清楚的,略过
    3 w: m% H9 l% C9 y! o
    0 q" ?& C( _( ?( k- ^0 l7 g' W  W  U* g/ E; D) @2 F  R
    , [* @) l; p. E9 p: c( c
    使用:
    - U' R" \- j- R7 ^- B6 W) C8 I8 r; w
              ①解析Protobuf,如下图
    ' \, G5 ~' T/ x. W2 H
    9 V+ `6 @8 C' `* m* h( A
             
    % g, _5 J4 I$ j$ V5 d
    9 B6 z8 x3 g( T
    ②生成易语言代码,如下图
    % H" b* B7 J3 l/ r3 G
    $ \0 N* Z8 ?8 ~$ i/ \0 Y- ]1 K8 _7 o) G: s% W* m, a' k# [
             
    3 R1 E$ G. d+ d& O$ Q, c; |; A0 }) X8 H7 j! r
    - K; ~8 B8 E: ~; K( T" E
            ③组包
    ! T3 a! h/ b- ~* }, }1 v, ?  D3 k% s! ^( |+ \

    $ y2 F+ P- d" ]1 W; U# ~# C% K1 i: Z
    ; Y4 [; {: S+ H( {9 T

    本帖子中包含更多资源

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

    x
    易语言实地培训,报名联系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 | 显示全部楼层

    / F' @3 C( m8 p) u非常感谢,回复发布成功,现在将转入主题页,请稍候……点击这里转入主题列表
    易语言实地培训,报名联系QQ 1615457736
    [超强]《易语言软件加密(防破解)技术特训》
    回复 支持 反对

    使用道具 举报

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

    [LV.3]偶尔看看II

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

    ; g' z; U0 B* I, s1 b2 k下载来研究下
    9 U- n: c  s0 c2 n5 Y下载来研究下
    & O1 [: c  d" P2 G" j) `下载来研究下  t3 ^8 h0 X4 x7 \
    下载来研究下
    / v* P% `0 o. o下载来研究下
    5 U' [0 L) a! }下载来研究下! t  v) ?. Z, b/ e  ?) _7 S+ c
    下载来研究下/ F& ~  L' O/ L( |" m2 u9 i; F
    下载来研究下
    易语言实地培训,报名联系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 | 显示全部楼层
    下载来研究下
    ' z& I  v* C7 o2 P下载来研究下
    易语言实地培训,报名联系QQ 1615457736
    [超强]《易语言软件加密(防破解)技术特训》
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2018-12-8 16:00:44 | 显示全部楼层
    下载来研究下/ r0 g7 G" C$ a! l- @
    下载来研究下
    易语言实地培训,报名联系QQ 1615457736
    [超强]《易语言软件加密(防破解)技术特训》
    回复 支持 反对

    使用道具 举报

    该用户从未签到

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

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2019-11-20 09:29 , Processed in 0.098247 second(s), 88 queries .

    Powered by Discuz! X3.4 Licensed

    © 2001-2017 Comsenz Inc.

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