一、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());
}
}

  

最新文章

  1. apple常用网址
  2. java画图之曲线拖动
  3. Nop源码分析二
  4. php自学提升进阶路线
  5. uploadify 一款优秀的上传插件
  6. JS之跨域
  7. 浅析java类加载器ClassLoader
  8. mysql列属性auto(mysql笔记四)
  9. kvm上安装xp
  10. 常用的工具GCC GDB Make Makefile
  11. opencv 简单、常用的图像处理函数(2)
  12. C 语言学习 之搭建环境和熟悉命令
  13. Jsp分页实例---假分页
  14. 【CSS学习笔记】a标签的四种伪类
  15. noip普及组2004 FBI树
  16. python笔记:#003#PyCharm 的初始设置
  17. synchronized修饰方法和代码块的区别
  18. Luogu4363 [九省联考2018]一双木棋chess 【状压DP】【进制转换】
  19. 论文笔记:SiamRPN++: Evolution of Siamese Visual Tracking with Very Deep Networks
  20. Redis集群 - Sentinel与RAFT算法

热门文章

  1. mysql执行语句汇总
  2. SQL——视图、事务、锁、存储过程
  3. Java入门第38课——猜字母游戏之设计程序结构
  4. js 删除数组中某一项的几种方法总结
  5. vue工厂化完整项目目录
  6. Uncaught TypeError: Cannot assign to read only property 'exports' of object '#<Object>'
  7. 06C#类
  8. 第2节 mapreduce深入学习:12、reducetask运行机制(多看几遍)
  9. SqlSever锁及存储过程优化
  10. 题解 洛谷P1903/BZOJ2120【[国家集训队]数颜色 / 维护队列】