• 在 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

  • 相关阅读:
    Java多线程系列目录(共43篇)
    Java 集合系列目录(Category)
    Floyd算法(三)之 Java详解
    Floyd算法(二)之 C++详解
    Floyd算法(一)之 C语言详解
    Dijkstra算法(三)之 Java详解
    Dijkstra算法(二)之 C++详解
    Dijkstra算法(一)之 C语言详解
    Prim算法(三)之 Java详解
    Prim算法(二)之 C++详解
  • 原文地址:https://www.cnblogs.com/zhangtingkuo/p/use-protobuf-in-java.html
Copyright © 2020-2023  润新知