一、示例代码
project依赖Google官方lib:protobuf-java-2.5.0.jar 【下载】
package java_protos_main;
import com.test.protocol.AddressProto;
import com.test.protocol.PersonProto;
/**
* Created by junwei8 on 16/7/30.
*/
public class ProtobufTest {
public static void main(String [] args){
//create person
byte [] person = createPerson();
System.out.println("==================");
//print person infomation
printPerson(person);
}
public static byte[] createPerson(){
System.out.println("begin create person...");
//创建message前需要先创建该message的Builder
AddressProto.Address.Builder addrBuilder = AddressProto.Address.newBuilder();
PersonProto.Person.Builder personBuilder = PersonProto.Person.newBuilder();
//利用Builder的setter方法给message fields赋值
addrBuilder.setProvince("北京");
addrBuilder.setMayor("北京");
personBuilder.setName("程序猿RD-XX");
personBuilder.setIdNum("RD-ID-NUM-XX-YY");
personBuilder.setAddress(addrBuilder);//给内部嵌套的message Address赋值
//利用Builder的build方法创建message实例
//把message转换为byte[]以利于实际使用中的网络传输
byte [] person = personBuilder.build().toByteArray();
System.out.println("finish create person success!");
return person;
}
public static void printPerson(byte [] personBytes){
try {
//利用byte[]创建message,实际使用中从InputStream接收byte[]创建message实例
PersonProto.Person person = PersonProto.Person.parseFrom(personBytes);
AddressProto.Address address = person.getAddress();
//调用message的getter方法
System.out.println("person name: " + person.getName());
System.out.println("person idnum: " + person.getIdNum());
System.out.println("come from province: " + address.getProvince());
System.out.println("come from mayor: " + address.getMayor());
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
e.getMessage();
}
}
}
二、代码分析
代码分析详见注释。