为了账号安全,请及时绑定邮箱和手机立即绑定

Android 中protobuf 的安装,编译和使用

标签:
Android

前端时间使用到了protobuf来与后台交互,网上的介绍也不是很全面,现在特地记录一下。希望对大家都有帮助。 
官网地址

1、如何写一个.proto的文件

这个你可以看上面的官网,里面这个介绍的还是可以。当然如果你牛掰,直接让后台给你写好。那也没有问题,我这里就只粘一个简单的proto文件。

message Person {

  required string name = 1;

  required int32 id = 2;

  optional string email = 3;

 

  enum PhoneType {

    MOBILE = 0;

    HOME = 1;

    WORK = 2;

  }

 

  message PhoneNumber {

    required string number = 1;

    optional PhoneType type = 2

  }

 

  repeated PhoneNumber phone = 4;

}

里面哪些属性的含义,都请各位看官去官网看吧,这里就不写了。

2、将proto文件编译成java文件

1、你需要下载prtobuf安装包。 
这里讲解一下windows的安装。官网下载地址选择里面的win32下载。下载完成之后解压就OK了。 
2、编译文件

protoc -I=$SRC_DIR --java_out=$DST_DIR $SRC_DIR/addressbook.proto

SRC_DIR:是指proto文件所在的目录 
DST_DIR:是指输出的Java文件存在的地址 
为了方便,我一般把proto文件拷贝到第一步挤压所在的文件夹,即和protoc.exe放在同一目录下面。这样编译的时候比较方便。 
首先我们cmd进入到protoc.exe所在的目录。之后就可以编译了。

protoc.exe -I=. --java_out =. addreddbook.proto

使用protoc.exe和protoc是一样的。这里的”.”是指当前目录。这样运行以后,就可以在当前目录看到生成的java文件。

3、如何解析收到的protoBuf文件

比如之前生成的java文件名叫做UPerson.java

UPerson.Person mPerson = Uperson.parseFrom(protobuf)

这里的protobuf是获取到的数据,之后就可以通过get方法获取里面具体的参数

String name = mPerson.getName();

int id = mPerson.getId();

String email = mPerson.getEmail();

Enum phoneType = mPerson.getPhoneType();

UPerson.Person.PhoneNumeber phoneNumeber = mPerson.getPhoneNumeber();

List<UPerson.Person.PhoneNumeber> phone = mPerson.getPhoneList();

4、如何组装成protobuf数据

Person john =

  Person.newBuilder()

    .setId(1234)

    .setName("John Doe")

    .setEmail("jdoe@example.com")

    .addPhone(

      Person.PhoneNumber.newBuilder()

        .setNumber("555-4321")

        .setType(Person.PhoneType.HOME))

    .addPhone(

      Person.PhoneNumber.newBuilder()

        .setNumber("555-4322")

        .setType(Person.PhoneType.HOME))

    .build();

5 使用for循环动态给repeated类型赋值。构造protobuf

UPerson.Person mPerson = UPerson.Person.newBuilder().build();

UPerson.Person.PhoneNumeber phoneNumeber = null;

for(int i = 0; i < mlist.size; i++) {

    phoneNumeber = UPerson.Person.PhoneNumeber

        .newBuilder()

        .setNumber(mList.get(i).getNumber())

        .setType(mList.get(i).getType)

        .build();

    mPerson = mPerson.toBuilder.addPhone(phoneNumber).build();

}

6、 如何给一个生成好的protobuf,重新赋值

比如重新赋值5中的john数据

john.toBuilder.

    .setId(12345)

    .setName("John Doe5")

    .setEmail("jdoe5@example.com")

    .addPhone(

      Person.PhoneNumber.newBuilder()

        .setNumber("555-43213")

        .setType(Person.PhoneType.WORK))

    .build();

大功告成,希望能对各位看官有帮助,大家觉得有用就帮忙顶一下,或者点个赞

 

原文链接:http://www.apkbus.com/blog-682543-61073.html

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消