zoukankan      html  css  js  c++  java
  • 在 Java 中使用 protobuf

    在 Java 中使用 protobuf

    https://github.com/google/protobuf/releases 下载编译器,并设置环境变量。

    创建java项目添加protobuf-java引用

    compile group: 'com.google.protobuf', name: 'protobuf-java', version: '3.2.0'
    

    编写.proto文件

    syntax = "proto3";
    
    message Person {
        int32 id = 1;
        string name = 2;
    
        repeated Phone phone = 4;
    
        enum PhoneType {
            MOBILE = 0;
            HOME = 1;
            WORK = 2;
        }
    
        message Phone {
            string number = 1;
            PhoneType type = 2;
        }
    }
    

    使用下面命令编译出.java文件

    protoc --java_out=./java ./proto/message.proto 
    

    编写java文件测试

    public class Main {
        public static void main(String[] args) {
            Message.Person.Builder personBuilder = Message.Person.newBuilder();
            personBuilder.setId(12345678);
            personBuilder.setName("Admin");
            personBuilder.addPhone(Message.Person.Phone.newBuilder().setNumber("10010").setType(Message.Person.PhoneType.MOBILE));
            personBuilder.addPhone(Message.Person.Phone.newBuilder().setNumber("10086").setType(Message.Person.PhoneType.HOME));
            personBuilder.addPhone(Message.Person.Phone.newBuilder().setNumber("10000").setType(Message.Person.PhoneType.WORK));
    
            Message.Person person = personBuilder.build();
            byte[] buff = person.toByteArray();
    
            try {
                Message.Person personOut = Message.Person.parseFrom(buff);
                System.out.printf("Id:%d, Name:%s
    ", personOut.getId(), personOut.getName());
    
                List<Message.Person.Phone> phoneList = personOut.getPhoneList();
    
                for (Message.Person.Phone phone : phoneList) {
                    System.out.printf("PhoneNumber:%s (%s)
    ", phone.getNumber(), phone.getType());
                }
    
            } catch (InvalidProtocolBufferException e) {
                e.printStackTrace();
            }
    
            System.out.println(Arrays.toString(buff));
    
        }
    }
    

    运行结果

    Id:12345678, Name:Admin
    PhoneNumber:10010 (MOBILE)
    PhoneNumber:10086 (HOME)
    PhoneNumber:10000 (WORK)
    [8, -50, -62, -15, 5, 18, 5, 65, 100, 109, 105, 110, 34, 7, 10, 5, 49, 48, 48, 49, 48, 34, 9, 10, 5, 49, 48, 48, 56, 54, 16, 1, 34, 9, 10, 5, 49, 48, 48, 48, 48, 16, 2]
    
    Process finished with exit code 0
    

    转载请注明来源 www.cnblogs.com/zhangtingkuo/p/use-protobuf-in-java.html

  • 相关阅读:
    re正则表达式公式讲解3
    re正则表达式2
    re正则表达式公式讲解1
    洛谷 P2962 [USACO09NOV]灯Lights
    9.26模拟赛
    BZOJ 1567: [JSOI2008]Blue Mary的战役地图

    洛谷 P2919 [USACO08NOV]守护农场Guarding the Farm
    洛谷P3252 [JLOI2012]树
    P3183 [HAOI2016]食物链
  • 原文地址:https://www.cnblogs.com/zhangtingkuo/p/use-protobuf-in-java.html
Copyright © 2011-2022 走看看