Google protobuf 的初步研究

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"

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容