下載
https://github.com/google/protobuf/releases
安裝
$ ./configure
$ make
$ make check
$ make install
建立msg.proto
option java_package = "com.protobuftest.protobuf";
option java_outer_classname = "PersonProbuf";
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 [default = HOME];
}
repeated PhoneNumber phone = 4;
message CountryInfo {
required string name = 1;
required string code = 2;
optional int32 number = 3;
}
}
message AddressBook {
repeated Person person = 1;
}
protoc --java_out=./src msg.proto
下載jar包
http://mvnrepository.com/artifact/com.google.protobuf/protobuf-java/3.1.0
PB序列化還原序列化寫入檔案測試
package com.protobuftest.protobuf;
import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.util.List; import com.google.protobuf.InvalidProtocolBufferException;import com.protobuftest.protobuf.PersonProbuf;import com.protobuftest.protobuf.PersonProbuf.Person;import com.protobuftest.protobuf.PersonProbuf.Person.PhoneNumber; public class TestPb { /** * @param args * @throws IOException */public static void main(String[] args) throws IOException {// TODO Auto-generated method stubPersonProbuf.Person.Builder builder = PersonProbuf.Person.newBuilder();builder.setEmail("kkk@email.com");builder.setId(1);builder.setName("TestName");builder.addPhone(PersonProbuf.Person.PhoneNumber.newBuilder().setNumber("131111111").setType(PersonProbuf.Person.PhoneType.MOBILE));builder.addPhone(PersonProbuf.Person.PhoneNumber.newBuilder().setNumber("011111").setType(PersonProbuf.Person.PhoneType.HOME)); Person person = builder.build();byte[] buf = person.toByteArray(); /*try {Person person2 = PersonProbuf.Person.parseFrom(buf);System.out.println(person2.getName() + ", " + person2.getEmail());List<PhoneNumber> lstPhones = person2.getPhoneList();for (PhoneNumber phoneNumber : lstPhones) {System.out.println(phoneNumber.getNumber());}} catch (InvalidProtocolBufferException e) {// TODO Auto-generated catch blocke.printStackTrace();} */System.out.println(buf);FileInputStream fs=null;FileOutputStream fo=null;try {fo=new FileOutputStream("D:\\test3");fo.write(buf);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{try {fo.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}try {fs=new FileInputStream("D:\\test3");Person person2 = PersonProbuf.Person.parseFrom(fs);System.out.println("ok"+person2.getName() + ", " + person2.getEmail());List<PhoneNumber> lstPhones = person2.getPhoneList();for (PhoneNumber phoneNumber : lstPhones) {System.out.println("ok:"+phoneNumber.getNumber());}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{} } }
轉載:http://blog.csdn.net/luyee2010/article/details/8206090