求教 ProtoBuf 交互传值 socket 发包 C++ 传stream 到 java 反序列化失败 问题

jjk_by 2014-05-09 10:02:02
1, C++ 序列化接口,
2,JNI交互接口 上报byte流,包括生成jarrayByte
3,JAVA 交互函数,反序列byte流,每次都进异常,

注:windows 下通过步骤 1 序列化socket是可以正常发包的 其中buf 和size是步骤1最后调用接口的前两个参数
求 大神指教!!!!!
...全文
528 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jjk_by 2014-10-28
  • 打赏
  • 举报
回复
引用 3 楼 chenxiaohong3905 的回复:
JNI接口不能使用java的char,应该使用byte,因为java的char是 16个字节的,只有java的byte才是和C++的unsigned char对应的,都是8个字节。

传到java的不是已经转成jbyteArray 了么
newzai 2014-07-29
  • 打赏
  • 举报
回复
JNI接口不能使用java的char,应该使用byte,因为java的char是 16个字节的,只有java的byte才是和C++的unsigned char对应的,都是8个字节。
十三邵 2014-05-09
  • 打赏
  • 举报
回复
引用 楼主 jjk_by 的回复:
1, C++ 序列化接口, 2,JNI交互接口 上报byte流,包括生成jarrayByte 3,JAVA 交互函数,反序列byte流,每次都进异常, 注:windows 下通过步骤 1 序列化socket是可以正常发包的 其中buf 和size是步骤1最后调用接口的前两个参数 求 大神指教!!!!!
我也不会,帮你顶一下吧。。。
jjk_by 2014-05-09
  • 打赏
  • 举报
回复
问题已经解决,
原因:在步骤一序列化接口的地方多了一步
// 生成文件头(大小)
cos->WriteVarint32(action.ByteSize());
传到java的buff不需要文件头,只要注释掉这一行就可以。但windows下还是需要的,所以可以在交互接口处分别处理两个平台下的序列化,使接口统一!!
注意:上面文件步骤2 有错误,是自己测试调试代码,正确代码如下:

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧