zoukankan      html  css  js  c++  java
  • Google Protocol Buffer 的使用(二)

    一、protobuf应用场景

    protobuf 在Java中的应用场景可以是序列化和反序列化,流可以通过文件或者通过网络TCP/UDP等方式传输。
    新建一个.proto文件

    syntax = "proto3";
    option java_package = "com.test.proto";
    option java_outer_classname = "RequestInfo";
    message SearchRequest {
        repeated Param query_param = 1;
        int32 page_number = 2;
        int32 result_per_page = 3;
    }
    
    message Param {
        int32 age = 1;
        string name = 2;
    }

    二、注意事项
    1、使用proto3,必须显示申明:syntax = "proto3" ,否则使用proto2
    2、生成的Java类的包可添加: option java_package = "com.test.proto";
    3、生成的Java类的类名可添加:option java_outer_classname = "RequestInfo";

    三、序列化和反序列化测试

    通过idea插件生成Java类RequestInfo.java(生成方式详见上篇文章:Google Protocol Buffer 的使用(一)),将数据序列化到本地文件。

    1、序列化测试:

    /**
     * 序列化
     * @author monkjavaer
     * @date 2019/01/05 09:27
     */
    public class WriteTest {
    
        public static void main(String[] args) throws IOException {
            //构造的RequestInfo信息
            RequestInfo.SearchRequest.Builder searchRequest = RequestInfo.SearchRequest.newBuilder();
            searchRequest.setPageNumber(1);
            searchRequest.setResultPerPage(10);
            RequestInfo.Param.Builder param = RequestInfo.Param.newBuilder();
            param.setAge(25);
            param.setName("Lee");
            searchRequest.addQueryParam(param);
            RequestInfo.SearchRequest request = searchRequest.build();
            //写文件
            FileOutputStream outputStream = new FileOutputStream(new File("F:\request.pro"));
            request.writeTo(outputStream);
            outputStream.close();
        }
    }
    

    2、 反序列化测试:

    /**
     * 反序列化
     * @author monkjavaer
     * @date 2019/01/06 09:43
     */
    public class ReadTest {
        public static void main(String[] args) throws IOException {
            FileInputStream in = new FileInputStream(new File("F:\request.pro"));
            RequestInfo.SearchRequest request = RequestInfo.SearchRequest.parseFrom(in);
            System.out.println(request.toString());
        }
    }
    

      

  • 相关阅读:
    【2019/7/15】暑假自学——周进度报告
    用户体验评价
    《程序员修炼之道》读后感03
    《程序员修炼之道》读后感02
    《程序员修炼之道》读后感01
    《梦断代码》读后感03——为什么我们不能像造桥一样造软件
    《梦断代码》读后感02——问题的开始
    《梦断代码》读后感01——Chandle的开始
    第二阶段冲刺9
    十五周总结
  • 原文地址:https://www.cnblogs.com/monkjavaer/p/10227164.html
Copyright © 2011-2022 走看看