Google Protocol Buffer 的使用(二) 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 tangquanbin
 * @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 tangquanbin
 * @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());
    }
}

  

猜你喜欢

转载自www.cnblogs.com/tangquanbin/p/10227164.html