php - 用protobuf数据格式,报“Protocol message tag had invalid wire type”异常
伊谢尔伦
伊谢尔伦 2017-04-10 15:01:22
[PHP讨论组]

Hi,all

因为业务需要,把原本的json的传输格式改成protobuf。服务端这边用的是php,客户端那边是android和ios。

在调试的过程中,发现客户端一直不能解析服务端传输过去的数据,android客户端一直报异常,如下:

Protobuf error:Protocol message tag had invalid wire type

背景信息

php端这边的情况

  • php5.4
  • Porobuf-php
  • protoc 2.4.1
  • mac osx 10.8下开发

Android端

  • Android版本4.4
  • 官方的protobuf库 2.4.1
  • protoc 2.4.1
  • ubuntu

php和android都是用同一套*.proto文件去生成对应的类。

php这边是如下序列化的:

    // use binary codec
    $codec = new \DrSlump\Protobuf\Codec\Binary();

    // prepare final output
    $response = new \ResponseMsg();
    $response->setStatusCode(\ResponseMsg\ErrorCode::RET_OK);
    $response->setData($codec->encode($recommend_bras));

    // Use custom codec
    $data = $codec->encode($response);
    echo $data;

Android端的反序列化:

 byte[] bytes = ret.result.getBytes();

//ByteString byteString = ByteString.copyFromUtf8(ret.result);

PResponseMsg.ResponseMsg responseMsg = PResponseMsg.ResponseMsg.parseFrom(bytes); 
伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(0)
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号