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());
}
}
Google Protocol Buffer 的使用(二)的更多相关文章
- Google Protocol Buffer的安装与.proto文件的定义
什么是protocol Buffer呢? Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准. 我理解的就是:它是一种轻便高效的结构 ...
- Google Protocol Buffer 的编码方式
Google Protocol Buffer 使用到了两种编码方式:Varints 和 zigzag. 一 Varints 编码 每个 byte 只用 7bit 表示数字,最高位 bit作为标志位,如 ...
- Google Protocol Buffer的安装与.proto文件的定义(转)
转自(https://www.cnblogs.com/yinheyi/p/6080244.html) 什么是protocol Buffer呢? Google Protocol Buffer( 简称 P ...
- Google Protocol Buffer 的使用(一)
一.什么是Google Protocol Buffer下面是官网给的解释:Protocol buffers are a language-neutral, platform-neutral exten ...
- Netty使用Google Protocol Buffer完成服务器高性能数据传输
一.什么是Google Protocol Buffer(protobuf官方网站) 下面是官网给的解释: Protocol buffers are a language-neutral, platfo ...
- Google Protocol Buffer 的使用和原理[转]
本文转自: http://www.ibm.com/developerworks/cn/linux/l-cn-gpb/ Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构 ...
- Google Protocol Buffer 的使用
简介 Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 ...
- 学习Google Protocol buffer之概述
XML这种属于非常强大的一种格式,能存储任何你想存的数据,而且编辑起来还是比较方便的.致命的缺陷在于比较庞大,在某些情况下,序列化和解析都会成为瓶颈.这种对于实时性很强的应用来说,就不太适合了,想象下 ...
- Google Protocol Buffer 的使用和原理
Google Protocol Buffer 的使用和原理 Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,很适合做数据存储或 RPC 数据交换格式.它 ...
随机推荐
- (二)Spring容器
大佬总结的很好,请去看大佬博客. http://www.cnblogs.com/chenssy/archive/2012/11/15/2772287.html https://www.cnblogs. ...
- 如何向妻子解释OOD (转)
此文译自CodeProject上<How I explained OOD to my wife>一文,该文章在Top Articles上排名第3,读了之后觉得非常好,就翻译出来,供不 ...
- 关于 Oracle 11g r2 Enterprise Manager (EM) 在windows环境无法启动的解决办法
正确的解决办法是在安装的时候使用emca正确安装 如果已经安装过Enterprise Manager: 请用是如下命令卸载后重装 emca -deconfig dbcontrol db emca -r ...
- Bing图片下载器(Python实现)
分享一个Python实现的Bing图片下载器.下载首页图片并保存到到当前目录.其中用到了正则库re以及Request库. 大致流程如下: 1.Request抓取首页数据 2.re正则匹配首页图片URL ...
- quazip非静态成员。。错误
转载请注明出处:http://www.cnblogs.com/dachen408/p/7147155.html 问题:quazip非静态成员..错误 解决方案:quazip_global.h 第42 ...
- html5开发移动混合App系列2-开发环境搭建(windows)
Java下载: http://www.oracle.com/technetwork/java/javase/downloads/index.html 环境变量: JAVA_HOME=C:\Progra ...
- vue脚手架引入swiper
方法一: 下载swiper: npm install swiper --save-dev swiper4.0使用入口:http://www.swiper.com.cn/usage/index.html ...
- 给SVN控制的项目添加忽略文件/文件夹
忽略目录其实有些像建立一个文件夹,但却不放入版本控制.如果不加入版本控制又会在svn status命令中显示出来,很不方便,所以可以设置本文件夹属性,让它既加入版本控制,又忽略其变化 未加入控制的文件 ...
- viewDidLoad等相关函数调用
viewDidLoad 此方法只有当view从nib文件初始化的时候才被调用.viewDidLoad用于初始化,加载时用到的. loadView 此方法在控制器的view为nil的时候被调用.虽然经常 ...
- 数据库insert update select语句
http://database.51cto.com/art/200903/113939_1.htm (更新语句) http://blog.csdn.net/chan ...