工具:
Eclipse : Version: Mars.1 Release (4.5.1)
Maven : Eclipse m2e (当前Eclipse自带)
项目结构:
1.下载protoc.exe , protobuf-java 2.5
2.建立一个工程tProtobuf,我这里用的Maven project .在下面建立一个proto文件件,用来存放【.proto】文件
3.将proto.exe放在工程下
4.创建person.proto
option java_package = "com.test.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]; //默认为Home
}
repeated PhoneNumber phone = 4;//必填
message Others {//其他信息 , 可选字段
optional int32 number = 1;
optional string ext1 = 2;
optional string ext2 = 3;
}
repeated Others others = 5;//必填
}
message BidPerson {//0~N
repeated Person person = 1;
}
5.生成java文件:通过Eclipse 自带 Terminal 切换到 -> proto.exe所在的目录下:protoc –java_out=./src/main/java ./proto/person.proto
6.刷新整个工程
7.测试用例.Tperson
package tProtobuf;
import java.util.List;
import com.google.protobuf.InvalidProtocolBufferException;
import com.test.protobuf.PersonProbuf;
import com.test.protobuf.PersonProbuf.Person;
import com.test.protobuf.PersonProbuf.Person.PhoneNumber;
public class Tperson {
public static void main(String[] args) {
// TODO Auto-generated method stub
PersonProbuf.Person.Builder builder = PersonProbuf.Person.newBuilder();
builder.setName("TestName");
builder.setId(1);
builder.setEmail("TestName@email.com");
PersonProbuf.Person.PhoneNumber.Builder kkPhoneNumber = PersonProbuf.Person.PhoneNumber.newBuilder();
kkPhoneNumber.setNumber("13608693650");
builder.addPhone(kkPhoneNumber);
builder.addPhone(PersonProbuf.Person.PhoneNumber.newBuilder().setNumber("131111111").setType(PersonProbuf.Person.PhoneType.MOBILE));
builder.addPhone(PersonProbuf.Person.PhoneNumber.newBuilder().setNumber("132222222").setType(PersonProbuf.Person.PhoneType.HOME));
PersonProbuf.Person.Others.Builder kkothers = PersonProbuf.Person.Others.newBuilder();
kkothers.setExt1("a");
kkothers.setExt2("a");
kkothers.setNumber(1);
builder.addOthers(kkothers);
Person person = builder.build();
System.out.println("person -> "+person.toString());
byte[] buf = person.toByteArray();
try {
Person person2 = PersonProbuf.Person.parseFrom(buf);
System.out.println("person2 -> "+person2.getName() + ", " + person2.getEmail());
System.out.println("person2 -> "+person2.toString());
List<PhoneNumber> lstPhones = person2.getPhoneList();
for (PhoneNumber phoneNumber : lstPhones) {
System.out.println(phoneNumber.getNumber());
}
} catch (InvalidProtocolBufferException e) {
e.printStackTrace();
}
}
}
注: 本人申明,已经测试通过!