zoukankan      html  css  js  c++  java
  • windows环境下protobuf的java操作{编译,序列化,反序列化}

    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;
                
            }
            View Code
          2. 编译:
            • 编译结果挺恶心的,一个只有几行代码的文件,编译结果动不动就是几千行几万行。。。
            • 编译命令示例:protoc --protopath D:lshdownloadprotoc-3.6.1-win32in --java_out ./ protoDemo.proto
              • protoc,编译命令;
              • --proto_path,就是你的proto文件所在目录是哪。我这里是D:lsh_downloadprotoc-3.6.1-win32in。
              • --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>
        View Code
      • 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();
                      }
              }
          
          }
          View Code
        • 执行结果如下:

    • 参考资料:
  • 相关阅读:
    开发微博应用7构思草图
    微博应用研究【2】
    跟着Artech学习WCF扩展(4) 扩展MessageInspector
    ASP.NET开源MVC框架VICI 测试的便利性
    第一次踏出.net后花园(一)
    回忆被三层架构忽悠的日子,上当的同学自觉举手
    微博应用开发10
    开发微博应用【5】应用的使用频率
    微博应用研究(4)
    微博应用研究(3)
  • 原文地址:https://www.cnblogs.com/InformationGod/p/9479919.html
Copyright © 2011-2022 走看看