Android 中protobuf 的安装,编译和使用
2016-07-08 11:30
525 查看
前端时间使用到了protobuf来与后台交互,网上的介绍也不是很全面,现在特地记录一下。希望对大家都有帮助。
官网地址
这里讲解一下windows的安装。官网下载地址选择里面的win32下载。下载完成之后解压就OK了。
2、编译文件
SRC_DIR:是指proto文件所在的目录
DST_DIR:是指输出的java文件存在的地址
为了方便,我一般把proto文件拷贝到第一步挤压所在的文件夹,即和protoc.exe放在同一目录下面。这样编译的时候比较方便。
首先我们cmd进入到protoc.exe所在的目录。之后就可以编译了。
使用protoc.exe和protoc是一样的。这里的”.”是指当前目录。这样运行以后,就可以在当前目录看到生成的java文件。
这里的protobuf是获取到的数据,之后就可以通过get方法获取里面具体的参数
大功告成,希望能对各位看官有帮助,大家觉得有用就帮忙顶一下,或者点个赞
官网地址
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.javaUPerson.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();
大功告成,希望能对各位看官有帮助,大家觉得有用就帮忙顶一下,或者点个赞
相关文章推荐
- C#使用Protocol Buffer(ProtoBuf)进行Unity中的Socket通信
- python如何通过protobuf实现rpc
- 我的Protobuf消息设计原则
- 化繁为简--google protobuf
- c++ java中关于protobuf反序列化对象实体和实体处理(函数)关系 (一)
- c++ java中关于protobuf反序列化对象实体和实体处理(函数)关系(二)
- Google 的开源技术protobuf 简介与例子
- Some Notes of Protocol Buffer C++
- rabbitmq学习
- Google Protocol Buffer 的使用和原理
- 最常用的两种C++序列化方案的使用心得
- protobuf通过反射来赋值
- TDEngine数据包的详细说明
- FlatBuffers与protobuf性能比较
- gogoprotobuf使用(上)
- gogoprotobuf使用(下)
- vs2012编译protobuf
- protocol buffer 编解码
- IOS之rpc实现