google通信协议probuf的使用
来源:互联网 发布:淘宝app打开很慢 编辑:程序博客网 时间:2024/06/05 15:24
1工具包准备:
A: protobuf-2.5.0-windows.zip 解压得到proto.exe。
B: protobuf.jar 放入工程,构建路径。
整个工程目录:
2 在工程中创建proto文件夹,在文件夹下创建文件,命名为phone.proto:
option java_package = "com.zjq.proto"; //类的包名option java_outer_classname = "PhoneEntity";//生成的数据访问类的类名 //required指定该字段必须赋值,禁止为空(在v3中该约束被移除);//optional指定字段为可选字段,可以为空,对于optional字段还可以使用[default]指定默认值,如果没有指定,则会使用字段类型的默认值;//repeated指定字段为集合。 message Phone { required int32 id = 1;//required是必须字段,参数传递过程中必须赋值 required string brand = 2;//必须字段,在后面的使用中必须为该段设置值 optional string price = 3;//可选字段,在后面的使用中可以自由决定是否为该字段设置值 repeated string sim=4;}3 使用java调用cmd生成对应的协议类:
package com.zjq.util;import java.io.IOException;public class GofClass { public static void main(String[] args) { String protoFile = "phone.proto"; /** * protoc.exe --java_out=java类输出目录 proto协议文件目录 */ String strCmd = "E:/protoc.exe --java_out=./src ./proto/"+ protoFile; try { Runtime.getRuntime().exec(strCmd); } catch (IOException e) { e.printStackTrace(); }//通过执行cmd命令调用protoc.exe程序 }}运行GofClass生成协议对应的实体类PhoneEntity.java
4 测试:
package com.zjq.test;import java.io.IOException;import java.util.ArrayList;import java.util.List;import com.zjq.proto.PhoneEntity.Phone;public class TestProbuf { public static void main(String[] args) throws IOException { Phone.Builder builder = Phone.newBuilder(); builder.setId(1); builder.setBrand("Apple"); builder.setPrice("5999"); List<String> list=new ArrayList<String>(); list.add("nano"); list.add("sim"); list.forEach((v)->builder.addSim(v)); Phone phone=builder.build(); System.out.println("Send:"); System.out.println(phone.toString()); System.out.println("==========消息体的每一个字节=========="); for(byte b : phone.toByteArray()){ System.out.print(b); } System.out.println(); System.out.println("==========解析收到的字节码消息消息=========="); //下面模拟接收到序列化的字节 //模拟接收Byte[],反序列化成Person类 byte[] receiveByteArray =phone.toByteArray(); Phone receiveMessage = Phone.parseFrom(receiveByteArray); System.out.println("Receive:" +receiveMessage.toString()); }}输出:
Send:id: 1brand: "Apple"price: "5999"sim: "nano"sim: "sim"==========消息体的每一个字节==========81185651121121081012645357575734411097110111343115105109==========解析收到的字节码消息消息==========Receive:id: 1brand: "Apple"price: "5999"sim: "nano"sim: "sim"使用此协议通常用于网络通信,传输都是字节码数据。
推荐一个probuf的说明文档。
阅读全文
0 0
- google通信协议probuf的使用
- google probuf解析原理分析
- probuf
- google probuf源码分析之common.h
- google probuf源码分析之descriptor
- google probuf反射原理之源码分析
- python版本的 probuf 生成
- google protobuf与as3的通信协议
- google protobuf与as3的通信协议
- google protobuf与as3的通信协议
- hbase probuf版本不一致问题的解决
- protobuf---Google通信协议
- socket通信协议中select()的使用与理解
- 飞鸽使用的通信协议是什么(未完待续)
- 自定义通信协议与PB通信协议的优缺点
- 通信协议的一般思路
- 通信协议的阅读学习方法
- 串口通信协议的定制
- ubuntu16.04耳机没声音解决
- PAT-A 1006. Sign In and Sign Out (25)
- 尾调用优化
- iOS Xcode工程目录的 folder 和 group的区别
- JMS简单原理
- google通信协议probuf的使用
- 如何线程安全地遍历List:Vector、CopyOnWriteArrayList
- 如何在网页上面引入flash文件的腾讯视频
- Android O 源码下载
- 关于XML 文件直接导入Mysql数据库内容笔记
- 新书创作谈:周立功教授数十年之心血力作《程序设计与数据结构》
- Android Gradle Build NullPointerException解决方案
- 教你打包Java程序,jar转exe随处可跑
- 剑指Offer—14—链表中倒数第k个结点