• protobuf初体验


    概念介绍

      Protocol buffers 是google公司的与语言无关、与平台无关的、可扩张的为序列化话结构数据,就像xml一样,办事更加的小巧、快速、简单。Protocol buffers 目前支持语言有Java,Python和C++。

    为什么不用XML

      Protocol buffers在序列化结构数据方便比XML有很多的有点。Protocolbuffers

    • 更加简单
    • 比xml小3-10倍
    • 比xml快20-100倍
    • 比xml更少的歧义
    • 以编程方式生成数据访问类更加容易

    前期准备(下载安装protocol buffers)

      官网地址:https://developers.google.com/protocol-buffers/

      由于google是被墙的,大家可以自行FQ,这里推荐一个网站可以直接通过添加hosts方式实现FQ(https://laod.cn/hosts/2016-google-hosts.html)

      下载地址:https://github.com/google/protobuf/releases/tag/v3.0.0

      下载  protobuf-java-3.0.0.zip和protoc-3.0.0-win32.zip

      下载完成之后将两个压缩包分别解压。

    Eclipse安装protocol buffers dt插件

      help->install New software...

      install Xtext  地址:http://download.eclipse.org/modeling/tmf/xtext/updates/composite/releases/

      isntall protobuf-dt  地址:http://junit.github.io/protobuf-dt/git/update-site/site.xml

      安装成功之后会出现如下图的一个菜单:

      配置说明如下图:

    编译protobuf的jar包

      由于protobuf是通过maven管理的,并且只提供了源代码,需要自行执行打包。

      将protoc.exe文件拷贝到解压之后的protobuf-3.0.0src目录下

      切换到protobuf-3.0.0java目录下,执行mvn install 

      

      安装成功之后如下图所示:

      

    现在就可以开发protobuf项目了

    1、添加protobuf依赖

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

    2、编写person.proto文件

    package proto;
    option java_package="com.wjg.base.protobuf.bean";
    option java_outer_classname = "PersonProto";
    
    message Person{
        required string name = 1;
        required int32 age =2;
        required string birthday = 3;
        required bool man = 4;
    
        enum PhoneType{
            MOBILE=0;
            HOME=1;
            WORK=2;
        }
    
        message PhoneNumber{
            required string number=1;
            optional PhoneType type =2[default = HOME];
        }
        repeated  PhoneNumber phone =5;
    }

    保存文件之后就会在com.wjg.base.protobuf.bean包下生成PersonProto类

    现在就可以开始测试了新建junit测试类

    /**
     * 
     */
    package com.wjg.base.protobuf;
    
    import org.junit.Test;
    
    import com.google.protobuf.InvalidProtocolBufferException;
    import com.wjg.base.protobuf.bean.PersonProto;
    import com.wjg.base.protobuf.bean.PersonProto.Person;
    
    /**
     * @author ghost
     * @version 创建时间:2016年11月23日 下午5:23:59 类说明
     */
    public class PersonProtoTest {
        /**
         * 测试序列化
         */
        @Test
        public void testSerialize() {
            PersonProto.Person.Builder builder = PersonProto.Person.newBuilder();
            builder.setAge(23);
            builder.setBirthday("2016-11-23");
            builder.setName("ghost");
            builder.setMan(true);
            builder.addPhone(Person.PhoneNumber.newBuilder()
                    .setNumber("010-34783871").setType(Person.PhoneType.MOBILE));
    
            Person person = builder.build();
            System.out.println(person.toString());
        }
    
        /**
         * 测试反序列化
         * 
         * @throws InvalidProtocolBufferException
         */
        @Test
        public void testDeserialize() throws InvalidProtocolBufferException {
            PersonProto.Person.Builder builder = PersonProto.Person.newBuilder();
            builder.setAge(23);
            builder.setBirthday("2016-12-23");
            builder.setName("ghostman");
            builder.setMan(true);
    
            Person person = builder.build();
            Person newPerson = Person.parseFrom(person.toByteArray());
            System.out.println(newPerson.toString());
        }
    }

     项目结构如下图所示:

    protobuf  java初体验已经结束。

    参考资料如下:

    https://developers.google.com/protocol-buffers/docs/javatutorial

    https://github.com/google/protobuf/

    http://www.cnblogs.com/ungshow/archive/2011/12/27/2303257.html

    http://blog.csdn.net/caisini_vc/article/details/5599468

    注:

    发现一个封装了protobuf文件操作的步骤,可以直接使用java注解定义字段类型即可。github地址如下,有兴趣的可以自行研究:

    https://github.com/jhunters/jprotobuf

  • 相关阅读:
    过国内外的waf的一些奇淫绝技<转>
    杂七杂八的敏感文件注释<持续更新帖>
    [讨论]“传递式”的攻击思想<转LN>
    无线hacking集合贴,持续更新~
    dede找后台《转》
    开源MFC扩展界面库:Ultimate Toolbox的编译(转)
    【转】Windows环境下设置Tomcat6启动参数
    [转]关于dll文件的生成以及找不到jni.h的解决办法
    VBA 7788
    ODBC连接EXCEL的一些问题
  • 原文地址:https://www.cnblogs.com/niceplay/p/6098095.html
Copyright © 2020-2023  润新知