一、什么是protoBuf
官方定义:
protocol buffers 是一种语言无关、平台无关、可扩展的序列化结构数据的方法,它可用于(数据)通信协议、数据存储等。
Protocol Buffers 是一种灵活,高效,自动化机制的结构数据序列化方法-可类比 XML,但是比 XML 更小(3 ~ 10倍)、更快(20 ~ 100倍)、更为简单。
你可以定义数据的结构,然后使用特殊生成的源代码轻松的在各种数据流中使用各种语言进行编写和读取结构数据。你甚至可以更新数据结构,而不破坏由旧数据结构编译的已部署程序。
二、protoBuf安装
下载路径:https://download.youkuaiyun.com/download/ningziwen/20590268
存放地址:
配置环境变量:
在Path中添加变量路径
检测是否成功:
cmd运行:protoc
三、关联idea(关联idea的时候不需要安装了)
需要安装Protobuf Support插件
依次点击Intellij中的“File”-->"Settings"-->"Plugins"-->"Browse repositories"
安装完后重启idea
或直接将下载好的protoc放到idea中
proto资源下载:https://download.youkuaiyun.com/download/ningziwen/20601202
D:\Program Files\JetBrains\IntelliJ IDEA 2018.3.4\plugins
然后配置环境变量path
pom.xml配置
<!-- https://mvnrepository.com/artifact/com.google.protobuf/protobuf-java -->
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>3.17.3</version>
</dependency>
<dependency>
<groupId>com.googlecode.protobuf-java-format</groupId>
<artifactId>protobuf-java-format</artifactId>
<version>1.2</version>
</dependency>
配置生成java路径
idea-->Toole-->Configure GenProtobuf
实例:
创建.proto文件
syntax = "proto3";
option java_outer_classname = "TestProtos";
message TestProtos {
string deptName = 1;
string deptPath = 2;
string state = 3;
string count = 4;
string sort = 5;
}
message TestReturnBean {
string result = 1;
string time =2;
repeated TestProtos dept = 3;
}
邮件在目标目录生成java文件
/**
* 按部门下载
* @param account
* @param deptid
* @return
*/
public List<UserProtosV3.UserBeanV3> findListByDeptId(String account, String deptid) {
System.out.println("findListByDeptId service start ------");
List<UserProtosV3.UserBeanV3> userList = this.findListByDeptId(deptid);
return userList;
}
//controller
List<UserProtosV3.UserBeanV3> userList = userDepService.findListByDeptId(accountPara, deptidPara);
//拼接正确返回的数据
userReturnBeanV3
.addAllUser(userList)
.setTime(currTime)
.setResult("1").build();
if(!org.springframework.util.StringUtils.isEmpty(userReturnBeanV3.getResult()) &&
!org.springframework.util.StringUtils.isEmpty(userReturnBeanV3.getTime())){
userReturnBeanV3.build().writeTo(out);
}else{
//返回数据
System.out.println(info);
info= Des3Util.encode(info);
out.write(info.getBytes());
}