proto-gen AS3版本的protobuf extension反序列化错误解决方法
2012-12-19 10:28
393 查看
转载请注明: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
定义的消息结构:
序列化:
反序列化
上面的void(SIGN_RES); 必须得加上,否则就会出现莫名其妙的解析结果。 这个用法很奇怪,我只用,但不知道什么原理。
前段时间用了 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); 必须得加上,否则就会出现莫名其妙的解析结果。 这个用法很奇怪,我只用,但不知道什么原理。
相关文章推荐
- mac os安装protobuf 2.4错误解决方法
- PROTOBUF 的错误 也许是GCC版本不对,现在我用的是GCC4.9出现错误。可能要用GCC5才能解决问题
- (转)C++ 版本的protobuf 动态序列化方法
- protobuf 转换python代码时发生 Expected "required", "optional", or "repeated".错误解决方法
- DedeCMS不支持PHP5.3、5.4及以上版本后台500错误白屏的解决方法
- Tensorflow protobuf版本报错问题解决(AttributeError: 'module' object has no attribute 'Default')
- 关于使用android studio 2.2.3版本编译报错过于简洁无法定位错误解决方法
- vs 2005 express 版本 关于debug 调试时显示 无法找到msvcr80d.dll的错误 解决方法
- Ubuntu下,通过gem安装mysql时,出现Failed to build gem native extension.错误的解决方法
- c#序列化与反序列化通用方法, 使用protobuf-net实现
- IIS上部署MVC网站,打开后ExtensionlessUrlHandler-Integrated-4.0解决方法IIS上部署MVC网站,打开后500错误
- Apache2.2整合PHP5.3以上的版本时提示错误Cannot load php5apache2_2.dll into server解决方法
- 非OpenGL版本的Qt使用QGLWidget构建OPenGL应用须知与编译错误解决方法
- IAR9.0以上版本编译低版本的协议栈常见错误及解决方法
- FindBugs 恶意代码(may expose internal representation),序列化(defines non-transient non-serializable )错误解决方法
- Hadoop本地库与系统版本不一致引起的错误解决方法
- duplicate symbol _protobuf_c_buffer_simple_append in ...错误解决
- JQuery 1.3.2以上版本中出现pareseerror错误的解决方法
- java protobuf运行错误解决(java.lang.ClassNotFoundException: com.google.protobuf.MessageOrBuilder)
- 基于cocos2dx2.2版本安卓环境搭建常见错误解决方法