zoukankan      html  css  js  c++  java
  • protobuf代码生成

    windows :

    1,两个文件:proto.exe, protobuf-java-2.4.1.jar

    2,建立一个工程TestPb,在下面建立一个proto文件件,用来存放【。proto】文件

    3,将proto,exe放在工程下,

    4,建立一个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;
    }

    5,生成 java文件:在proto.exe目录下:protoc --java_out=./src ./proto/msg.proto

    (这里最重要,注意,protoc可以生成cpp,java,python等多种代码,protoc --help就可以设定对应参数)

    6,copy个测试示例了

    新建一个文件TestPb.java
    ***********************************************************
    package com.protobuftest.protobuf;
    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
    */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    PersonProbuf.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 block
    e.printStackTrace();
    }
    System.out.println(buf);
    }
    }

    ***********************************************

    *******************************
    生成java文件:PersonProbuf.java
    *******************************

    工程文件结构:

  • 相关阅读:
    MVC笔记 Controller相关技术
    C#调用斑马打印机打印条码标签(支持COM、LPT、USB、TCP连接方式和ZPL、EPL、CPCL指令)
    Cookies揭秘 [Asp.Net, Javascript]
    我的一些学习资源
    也来学学插件式开发续-利用MEF
    也来学学插件式开发
    Entity Framework With Oracle
    EF Code First学习笔记:数据库创建
    EF Code First 学习笔记:表映射
    Entity Framework Code First级联删除
  • 原文地址:https://www.cnblogs.com/cl1024cl/p/6205653.html
Copyright © 2011-2022 走看看