google protocol buffer的使用和原理

  • 概况:

    • Protocol Buffers(也就是protobuf)是谷歌的语言中立的、平台中立的、可扩展的用于序列化结构化的数据;
  • windows环境下的安装与使用:
    • protocol编译器
      1. 安装。安装protocol编译器,用来编译.proto文件;
        1. 下载。路径:https://github.com/google/protobuf/releases。里面有windows版的:protoc-3.6.1.win32.zip。
        2. 安装。
          • 下载完解压后,如果不想安装,可直接在cmd窗口进入解压得到的bin目录操作。
          • 安装,把bin目录copy下来,放到操作系统环境变量的path变量后面。
      2. 使用
        1. 自己编写proto文件。例如我这里写的文件:

          message demo{
          required int32 id = 1;
          required string name = 2;
          optional string email = 3;
          repeated string friends = 4; }
        2. 编译:
          • 编译结果挺恶心的,一个只有几行代码的文件,编译结果动不动就是几千行几万行。。。
          • 编译命令示例:protoc --protopath D:\lshdownload\protoc-3.6.1-win32\bin --java_out ./ protoDemo.proto
            • protoc,编译命令;
            • --proto_path,就是你的proto文件所在目录是哪。我这里是D:\lsh_download\protoc-3.6.1-win32\bin。
            • --java_out,标识输出的java文件应该放在哪个目录。这里的 ./ 是指当前目录。
            • protoDemo.proto,就是我们要编译的文件。
    • 关于protoc命令参数,大家可以在cmd窗口输入protoc --help 然后回车得到。
    • 安装protobuf,这里我选择maven安装。
      <dependency>
      <groupId>com.google.protobuf</groupId>
      <artifactId>protobuf-java</artifactId>
      <version>3.6.0</version>
      </dependency>
    • protobuf API的使用:
      • java文件,如上.proto文件得到的.java文件,我的文件名是ProtoDemo.java.
      • 调用API做什么?
        • 序列化;
        • 反序列化。
      • 编写序列化和反序列化代码如下:
        package demo.protobuf;
        
        import java.io.FileInputStream;
        import java.io.FileOutputStream;
        import java.io.IOException; import demo.protobuf.ProtoDemo.demo.Builder; public class SerialAndDesial { public static void main(String[] args) {
        Builder b = ProtoDemo.demo.newBuilder();
        b.setEmail("dave_peter@foxmail.com");
        b.setId(1);
        b.setName("lsh"); ProtoDemo.demo protoDemo = b.build(); FileOutputStream output;
        try {
        //write
        output = new FileOutputStream("proto.ser");
        protoDemo.writeTo(output);
        output.close(); //read
        ProtoDemo.demo protoDemo2 = ProtoDemo.demo.parseFrom(new FileInputStream("proto.ser"));
        System.out.println(protoDemo2);
        } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        }
        } }
      • 执行结果如下:

        aaarticlea/png;base64,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" alt="" />

  • 参考资料:

windows环境下protobuf的java操作{编译,序列化,反序列化}的更多相关文章

  1. windows环境下安装pymysql(操作带图)

    在windows环境下安装pymysql,首先要找到python的安装位置,如果在c盘,启动cmd的时候,要获取管理员权限. 具体步骤,一,管理员模式启动cmd.在箭头指定位置,搜索cmd,出现快捷方 ...

  2. Windows环境下JDK的配置及多版本JDK切换的方法记录

    (这里记录了笔者了解的关于JDK环境配置的信息,以及针对系统上存在不同版本JDK时所尝试的解决方案.具体来说,是已安装 JDK 8 后,又安装了 JDK 9 时所遇到的问题和尝试的解决方法.这次记录以 ...

  3. 代理server的理解(1):Windows环境下的代理server设置

    浏览器中的代理server设置 Windows系统接口提供的代理server设置是一个全局的代理server的设置,如图所看到的,这里就不多解释: 各个浏览器在使用代理设置的时候,能够主动地获代替理设 ...

  4. Windows环境下google protobuf入门

    我使用的是最新版本的protobuf(protobuf-2.6.1),编程工具使用VS2010.简单介绍下google protobuf: google protobuf 主要用于通讯,是google ...

  5. Windows环境下使用VS2005编译OpenSSL

    如何Windows环境下,使用VS2005编译OpenSSL,虽然这个问题在Baidu.Google上一堆,但安装中还是遇到些问题,在这里 记录下来希望能帮助大家不要在走弯路.注:我是在WinXP S ...

  6. Openstack 二次开发之:在windows 环境下编译Openstack-java-sdk

    在windows环境下使用maven对openstack-java-sdk进行编译 编译源文件 下载源代码 git clonehttps://github.com/woorea/openstack-j ...

  7. 编译实战 | 手摸手教你在Windows环境下运行Redis6.x

    原创:微信公众号 码农参上,欢迎分享,转载请保留出处. 哈喽大家好啊,我是没事就愿意瞎捣鼓的Hydra. 不知道有没有小伙伴像我一样,平常开发中用的是windows操作系统,有时候想装点什么软件,一看 ...

  8. Windows环境下启动Redis报错:Could not create server TCP listening socket 127.0.0.1:6379: bind: 操作成功完成。(已解决)

    问题描述: 今天在windows环境下启动Redis时启动失败报错: 解决方案: ①运行命令:redis-cli.exe ②退出Redis ③运行命令:redis-server.exe redis.w ...

  9. 第一部分:使用iReport制作报表的详细过程(Windows环境下)

    提示:在有些板块,文中的图片看不到,建议到我的blog浏览文章:http://blog.csdn.net/jemlee2002/文章将会涉及3个方面的内容: 第一部分:使用iReport制作报表的详细 ...

随机推荐

  1. WPF模板(一)详细介绍

    本次随笔来源于电子书,人家的讲解很好,我就不画蛇添足了. 图形用户界面应用程序较之控制台界面应用程序最大的好处就是界面友好.数据显示直观.CUI程序中数据只能以文本的形式线性显示,GUI程序则允许数据 ...

  2. 【转】AJAX请求和普通HTTP请求区别

    两者本质区别: AJAX通xmlHttpRequest象请求服务器服务器接受请求返数据实现刷新交互 普通http请求通httpRequest象请求服务器接受请求返数据需要页面刷新 AJAX请求 普通请 ...

  3. ssm框架的整合搭建(二)

    maven简单项目的创建前面已经完成了,下面开始依赖包和配置文件的编写 好好努力每一天!!!!!! 项目结构看这里 1.首先,依赖包pom.xml <project xmlns="ht ...

  4. Python:Day19 正则表达式补充

    贪婪匹配 贪婪匹配是指字符后面是*+?的时候,都是尽可能多的匹配,如果不想尽可能多的匹配,那么在这三个字符后面加?号即可,这样变成惰性匹配,按最少匹配. ret = re.findall('ab??' ...

  5. 自定义的库加载不进来,因为库中import的PIL和pillow文件没有pip install

    1.自定义的库,加载进来,提示red不能识别这个class或moudle 2.应该展开细节多看下,细节中提示,没有PIL和pillow 3.这个时候在cmd中使用pip安装PIL和pillow pip ...

  6. git分支开发的好处

    有不少开发者们不习惯使用Git分支开发.原因有如下几个方面?(1)不熟悉不习惯;(2)觉得太麻烦;今天我想说的是使用git分支开发绝对是一个高效版本控制的做法. 当你遇到测试人员给你提的bug,你只需 ...

  7. 编程从入门到放弃(Java)

      1.Java入门篇 1.1 基础入门和面向对象 1.1.1 编程基础 [01] Java语言的基本认识 [02] 类和对象 [03] 类的结构和创建对象 [04] 包和访问权限修饰符 [05] 利 ...

  8. Numpy求均值、中位数、众数的方法

    首先需要数据源,这里随便写了一个: nums = [1,2,3,4] 求均值和中位数均可以使用numpy库的方法: import numpy as np #均值 np.mean(nums) #中位数 ...

  9. console 命令进行 JS 调试的灵活用法

    1.console.log() 占位符 console.log 支持的占位符包括:字符(%s).整数(%d或%i).浮点数(%f)和对象(%o): console.log('字符串: %s, 整数: ...

  10. EntityFramework Core问题处理集锦(一)

    前言 和大家脱离了一段时间,有时候总想着时间挤挤总是会有的,但是并非人愿,后面会借助周末的时间来打理博客,如有问题可以在周末私信我或者加我QQ皆可,欢迎和大家一起探讨,本节我们来讨论EF Core中的 ...