美文网首页大数据那些事儿
Google protobuf 的初步研究

Google protobuf 的初步研究

作者: 跨界师 | 来源:发表于2017-09-05 22:15 被阅读98次

    protobuf初见

    今天由于偶然的机会,了解到Google的protobuf,貌似功能很强大。
    主要作用是自动生成实体类工具,并形成标准的java文件,用起来非常方便。

    具体的格式可以参见:https://github.com/google/protobuf

    实现步骤

    第一步:环境准备

    下载

    首先需要下载protobuf-2.5.0-windows.zip,解压后得到一个protoc.exe文件,这个是可以自动生成实体类的工具。

    第二、需要新建一个普通的maven工程,其结构是

    工程结构.png

    添加配置信息:

    <dependency>
    <groupId>com.google.protobuf</groupId>
    <artifactId>protobuf-java</artifactId>
    <version>RELEASE</version>
    </dependency>

    同时将protoc.exe文件添加到proto文件夹中。

    在proto文件夹中添加一个文件名为persion-entity.proto的文件:

    option java_outer_classname = "PersonEntity";//生成的数据访问类的类名
    message Person {
    required int32 id = 1;//同上
    required string name = 2;//必须字段,在后面的使用中必须为该段设置值
    optional string email = 3;//可选字段,在后面的使用中可以自由决定是否为该字段设置值
    }

    上面可以看出定义了一个Person类,其中包含id,name和email属性,而且id和name是必须项,email是可选项。

    第三、上面的所有步骤都做了之后,可以使用下面命令产生实体类

    protoc.exe --java_out=./ persion-entity.proto
    上面的--java_out 是指定输出路径,persion-entity.proto为你自己定义的文件

    执行完之后将会生成一个java文件

    实体类.png

    其内容就是自动生成的。

    现在测试

    package com.protobuf.test;

    import com.google.protobuf.InvalidProtocolBufferException;
    import com.protobuf.proto.PersonEntity;

    public class Test {

    public static void main(String[] args) throws InvalidProtocolBufferException {
        PersonEntity.Person.Builder builder = PersonEntity.Person.newBuilder();
        builder.setId(1);
        builder.setEmail("zhangzheming@google.com");
        builder.setName("ant");
    
        PersonEntity.Person person = builder.build();
        System.out.println("before:"+person.toString());
    
    
        System.out.println("=============");
        for (byte b:person.toByteArray()){
            System.out.print(b);
        }
    
        System.out.println();
        System.out.println(person.toByteArray());
        System.out.println("===============");
    
        byte[] byteArray = person.toByteArray();
        PersonEntity.Person p2 = PersonEntity.Person.parseFrom(byteArray);
        System.out.println("after:"+p2.toString());
    }
    

    结果

    before:id: 1
    name: "ant"
    email: "zhangzheming@google.com"

    =============
    8118397110116262312210497110103122104101109105110103641031111111031081014699111109
    [B@573fd745
    ===============
    after:id: 1
    name: "ant"
    email: "zhangzheming@google.com"

    相关文章

      网友评论

        本文标题:Google protobuf 的初步研究

        本文链接:https://www.haomeiwen.com/subject/ayrcjxtx.html