Google Protocol Buffer 的使用(二)
2024-09-06 01:56:04
一、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());
}
}
最新文章
- apple常用网址
- java画图之曲线拖动
- Nop源码分析二
- php自学提升进阶路线
- uploadify 一款优秀的上传插件
- JS之跨域
- 浅析java类加载器ClassLoader
- mysql列属性auto(mysql笔记四)
- kvm上安装xp
- 常用的工具GCC GDB Make Makefile
- opencv 简单、常用的图像处理函数(2)
- C 语言学习 之搭建环境和熟悉命令
- Jsp分页实例---假分页
- 【CSS学习笔记】a标签的四种伪类
- noip普及组2004 FBI树
- python笔记:#003#PyCharm 的初始设置
- synchronized修饰方法和代码块的区别
- Luogu4363 [九省联考2018]一双木棋chess 【状压DP】【进制转换】
- 论文笔记:SiamRPN++: Evolution of Siamese Visual Tracking with Very Deep Networks
- Redis集群 - Sentinel与RAFT算法
热门文章
- mysql执行语句汇总
- SQL——视图、事务、锁、存储过程
- Java入门第38课——猜字母游戏之设计程序结构
- js 删除数组中某一项的几种方法总结
- vue工厂化完整项目目录
- Uncaught TypeError: Cannot assign to read only property &#39;exports&#39; of object &#39;#<;Object>;&#39;
- 06C#类
- 第2节 mapreduce深入学习:12、reducetask运行机制(多看几遍)
- SqlSever锁及存储过程优化
- 题解 洛谷P1903/BZOJ2120【[国家集训队]数颜色 / 维护队列】