简单介绍Protobuf协议
架构师-网络文章汇总
Protobuf协议 , 全称:Protocol Buffer它跟JSON , XML一样 , 是一个规定好的数据传播格式 。 不过 , 它的序列化和反序列化的效率太变态了……
来看看几张图你就知道它有多变态 。
文章插图
文章插图
文章插图
Protobuf的Java实例一、 安装Protobuf去Protobuf的GitHub下载 , 解压 。
如果你是Windows环境 , 则还要下载多一个东西 。 protobuf-2.5.0-windows.zip 。
解压protobuf-2.5.0-windows.zip , 把protoc.exe放在Protobuf安装目录下的src里 。 (其实放哪都可以)
二、 配置环境变量编辑系统变量Path , 添加Protoc.exe的存放目录 。
文章插图
三、 Eclipse新建项目我使用maven构建protobuf项目 , 方便引入protobuf-java-2.5.0.jar依赖 。 在项目根目录创建proto文件夹 , 存放proto文件 。
文章插图
maven依赖pom.xml
四、编写.proto文件在proto文件夹下编写person-entity.proto , 如下(proto协议的规则点这查看)
option java_outer_classname = "PersonEntity";//生成的数据访问类的类名message Person {required int32 id = 1;//同上required string name = 2;//必须字段 , 在后面的使用中必须为该段设置值optional string email = 3;//可选字段 , 在后面的使用中可以自由决定是否为该字段设置值}123456
四、使用protoc.exe编译成java类有两种方法:1. 使用Java Rumtime执行cmd命令2. 直接打开cmd运行命令也行 。
1. 使用Java Rumtime执行cmd命令util包下新建GenerareClass类
文章插图
/** * protoc.exe * @author ganhaibin * */public class GenerateClass {public static void main(String[] args) {String protoFile = "person-entity.proto";//String strCmd = "d:/dev/protobuf-master/src/protoc.exe -I=./proto --java_out=./src/main/java ./proto/"+ protoFile;try {Runtime.getRuntime().exec(strCmd);} catch (IOException e) {e.printStackTrace();}//通过执行cmd命令调用protoc.exe程序}}12345678910111213141516
命令格式如下 。
protoc.exe -I=proto的输入目录 --java_out=java类输出目录 proto的输入目录包括包括proto文件1
2. 直接打开cmd运行命令
文章插图
生成的PersonEntity.java类
文章插图
五、测试编写Test类 , 模拟序列化和反序列化过程 。
public class Test {public static void main(String[] args) throws IOException {//模拟将对象转成byte[] , 方便传输PersonEntity.Person.Builder builder = PersonEntity.Person.newBuilder();builder.setId(1);builder.setName("ant");builder.setEmail("ghb@soecode.com");PersonEntity.Person person = builder.build();System.out.println("before :"+ person.toString());System.out.println("===========Person Byte==========");for(byte b : person.toByteArray()){System.out.print(b);}System.out.println();System.out.println(person.toByteString());System.out.println("================================");//模拟接收Byte[] , 反序列化成Person类byte[] byteArray =person.toByteArray();Person p2 = Person.parseFrom(byteArray);System.out.println("after :" +p2.toString());}}123456789101112131415161718192021222324
推荐阅读
- 黑鲨4pro什么时候出多少钱,黑鲨4pro价格参数介绍
- 三星环保电视遥控器介绍:融入再生塑料 支持太阳能充电
- 小米11屏幕翻车发绿怎么回事 屏幕问题检测方法介绍
- 1个手机怎么登录2个微信?方法很简单,看完我学会了
- 原来华为手机拍视频还能添加字幕,方法很简单,一学就会
- 手机照片、视频怎样添加文字?原来很简单,4种方法一分钟搞定
- 微信最近很火的“圣诞帽头像”,原来这么简单,快学起来
- 只为好看?手机多摄像头排布方式可没有那么简单
- 专家介绍如何判断智能手机被入侵:运行速度变慢、电池消耗过快以及卡顿
- 华为nova8pro怎么样值得入手么 nova8pro参数亮点介绍