protobuf——使用protoc.exe生成message文件

1.下载protoc.exe和对应jar包

protoc.exe从https://github.com/protocolbuffers/protobuf/releases下载protoc-3.7.0-win64.zip,解压后bin目录下有对应proto.exe文件。

jar包去maven库中搜索protobuf-java-3.7.0.jar.

2.编写test.proto文件

package message;

option java_package = "com.test.message";
option java_multiple_files = true;//生成的message文件是多个,在一个包下,否则是一个包装类
option optimize_for = LITE_RUNTIME;
//Protocol Buffer定义三种优化级别SPEED/CODE_SIZE/LITE_RUNTIME。缺省情况下是SPEED。
//SPEED: 表示生成的代码运行效率高,但是由此生成的代码编译后会占用更多的空间。
//CODE_SIZE: 和SPEED恰恰相反,代码运行效率较低,但是由此生成的代码编译后会占用更少的空间,通常用于资源有限的平台,如Mobile。
//LITE_RUNTIME: 生成的代码执行效率高,同时生成代码编译后的所占用的空间也是非常少。这是以牺牲Protocol Buffer提供的反射功能为代价的。
// SPEED和LITE_RUNTIME相比,在于调试级别上,例如 msg.SerializeToString(&str) 在SPEED模式下会利用反射机制打印出详细字段和字段值,但是LITE_RUNTIME则仅仅打印字段值组成的字符串;

message RequestDataMsg1
{
	required int32 id = 1;
	optional string dataType = 2;
}
message StringIntegerMap
{
	required string dataName = 1;
	required int32 data = 2;
}
message ResponseDataMsg2
{
	repeated StringIntegerMap dataMap = 1;
}

3.编写generateProto.bat,使用批处理执行protoc.exe --java_out=生成message的目录 test.proto 命令生成message文件(可以在命令行直接去protoc.exe所在目录执行)

@title generate message
@cd %~dp0
@rem %~dp0 “d”为Drive的缩写,即为驱动器,磁盘、“p”为Path缩写,即为路径,目录
@rem current dir: %~dp0
%~d0

@echo batch generate proto 
@rem @author chencan
@rem @echo off常用于开头,表示不显示所有的命令行信息,包括此句,相当于在每一行开头加 @
@rem 在批处理文件里面用 for,变量就用 %%
@rem set是对参数的定义,动态的话需要加上/p的条件

@echo off
set /p protoFile=please input filename:
if exist "%protoFile%" goto:process 
rem call跳转到子批处理,并且不终止父批处理,start 是在新窗口执行
echo file not exist!
rem 再次执行当前批处理
call %0


:process
@echo file:"%protoFile%" exist!
@echo generating message,please wait...
@protoc.exe --java_out=../src %protoFile%
@echo generate success!
pause
goto:eof

proto文件,protoc.exe,generateProto.bat放在同一文件夹下,执行generateProto.bat脚本。

done

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值