简单介绍Protobuf协议
【简单介绍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
输出如下
文章插图
- 页面|如何简单、快速制作流程图?上班族的画图技巧get
- 公式|?有人把 5G 讲得这么简单明了
- 简单|互联网巨头夺走菜贩生计?未必那么简单
- 介绍|5分钟介绍各种类型的人工智能技术
- 简单|密码太难记不住,太简单不安全,怎么办?
- 手机|OPPO手机该如何截屏?四种最简单的方法已汇总!
- 动手做|动手做一个最简单的加法计算器
- 平台好友|《妄想山海》好友列表介绍
- 简单|行车记录仪数据丢失怎么办?想要简单恢复,那还不试一下这个?
- 打印机的共享设置方法,简单6部搞定!