proto-gen AS3版本的protobuf extension反序列化错误解决方法

来源:互联网 发布:淘宝单号查询 编辑:程序博客网 时间:2024/05/22 13:00

转载请注明:http://blog.csdn.net/herm_lib/article/details/8330493

前段时间用了 proto-gen AS3版本的 protobuf,用到了extension的时候,出事了,表现为,有时候反序列成功,有时候又失败,各种未定义行为。因为,先前用C++版本都很顺利,所以惯性上认为是自己代码有问题,然后各种排查,无果。然后,问同事,他们都没用到extension特性;网上查,按照proto-gen wiki上操作,不行。最后,就给pop_atry这哥们(中国人,好沟通)发邮件,原来这哥们wiki上的例子写错了,被坑了(开玩笑)。在这里,感谢pop_atry的回复。处理这个是问题有一段时间了,今天突然想到要写在blog上,让后来人得于立即解决这个问题,避免我当时解决问题的各种悲剧,浪费很多时间。

protobuf extension的使用方法请见:http://blog.csdn.net/herm_lib/article/details/7843560


定义的消息结构:

主文件 cs_msg.proto:message MsgBody{    // [19000, 19999]是protobuf预留    extensions 100 to max;  //  max is 2^29 - 1 tags分配规则见下面}另外一个文件cs_auth.proto:import cs_msg.proto;message SignReq{    required uint32 uid = 1;}extend MsgBody{    optional SignReq sign_req = 201;}

序列化:

var mb:MsgBody = new MsgBody;var singReq:SignReq = mb[SIGN_REQ];

反序列化

var mb:Msg = new MsgBody;mb.MergeFrom(...);void(SIGN_RES);   // 必须加一个这行var singRes:SignRes = mb[SIGN_RES];

上面的void(SIGN_RES); 必须得加上,否则就会出现莫名其妙的解析结果。 这个用法很奇怪,我只用,但不知道什么原理。

原创粉丝点击