Protocol Buffer Java实例
大家要先下载protobuffer,在这里:
https://code.google.com/p/protobuf/downloads/list
注意,需要下载两个,一个是complier,另外一个是source code (我下载的是2.5的版本);
讲complier对应的 protoc.exe 拷贝至 source code 对应的./protobuf-2.5.0/src目录下(mvn 编译需要);
cd 到 ./protobuf-2.5.0/java 目录, 执行 mvn clean package 命令打包;
到target目录获取生成的protobuf-java-2.5.0.jar包(Java代码对protobuf依赖的jar包);
person.proto文件
package com.shine.pb;
option java_package = "com.shine.pb.person";
option java_outer_classname = "MyPerson"; message Person {
required int32 id = 1;
required string name = 2;
optional string email = 3; enum PhoneType {
MOBILE = 0;
FIXED = 1;
} message PhoneInfo {
required string number = 1;
required PhoneType type = 2 [default=MOBILE];
} optional PhoneInfo phone = 4;
}
到protoc.exe所在目录,执行 protoc --java_out=./output/java ./messages/MyMessage.proto
可生成proto文件对应的Java类;
copy到自己eclipse对应src后;写main方法测试,代码如下:
package com.shine.pb.person; import com.google.protobuf.InvalidProtocolBufferException;
import com.shine.pb.person.MyPerson.Person.PhoneType; public class Test { public static void main(String[] args) throws InvalidProtocolBufferException {
MyPerson.Person.Builder builder = MyPerson.Person.newBuilder();
builder.setId(1);
builder.setName("shine");
builder.setEmail("chenguodong@baidu.com");
MyPerson.Person.PhoneInfo.Builder phoneInfoBuilder = MyPerson.Person.PhoneInfo.newBuilder();
phoneInfoBuilder.setNumber("13899999999");
phoneInfoBuilder.setType(PhoneType.MOBILE);
builder.setPhone(phoneInfoBuilder.build()); MyPerson.Person shine = builder.build(); System.out.println(shine.getSerializedSize());
System.out.println(shine.getEmail());
System.out.println(shine.getName());
System.out.println(shine.getPhone().getNumber()); System.out.println("============================================="); byte[] data = shine.toByteArray();
builder = MyPerson.Person.newBuilder();
MyPerson.Person person = MyPerson.Person.parseFrom(data);
System.out.println(person.getSerializedSize());
System.out.println(person.getEmail());
System.out.println(person.getName());
System.out.println(person.getPhone().getNumber());
} }
Protocol Buffer Java实例的更多相关文章
- [翻译]Protocol Buffer 基础: C++
目录 Protocol Buffer Basics: C++ 为什么使用 Protocol Buffers 在哪可以找到示例代码 定义你的协议格式 编译你的 Protocol Buffers Prot ...
- Protocol Buffer技术详解(Java实例)
Protocol Buffer技术详解(Java实例) 该篇Blog和上一篇(C++实例)基本相同,只是面向于我们团队中的Java工程师,毕竟我们项目的前端部分是基于Android开发的,而且我们研发 ...
- Protocol Buffer序列化Java框架-Protostuff
了解Protocol Buffer 首先要知道什么是Protocol Buffer,在编程过程中,当涉及数据交换时,我们往往需要将对象进行序列化然后再传输.常见的序列化的格式有JSON,XML等,这些 ...
- Protocol Buffer技术详解(C++实例)
Protocol Buffer技术详解(C++实例) 这篇Blog仍然是以Google的官方文档为主线,代码实例则完全取自于我们正在开发的一个Demo项目,通过前一段时间的尝试,感觉这种结合的方式比较 ...
- Protocol Buffer序列化对比Java序列化.
初识 Protocol Buff是谷歌推出的一种序列化协议. 而Java序列化协议也是一种协议. 两者的目的是, 将对象序列化成字节数组, 或者说是二进制数据, 那么他们之间有什么差异呢. proto ...
- Protocol Buffer序列化/反序列化---初体验(java版)
今天闲遐时学习了 Protocol Buffer 在网上看到了许多资料,其中不泛精品,想要详细了解的请看文章结尾的友情链接,我这里就做加深印象,快速入门的一个完整的demo,仅此而已. 学完你可以得到 ...
- Java与C++进行系统间交互:Protocol Buffer
在一次项目中,因笔者负责的java端应用需要与公司C++系统进行交互,公司选定Protocol Buffer方案,故简单的了解一下 有需要的可以看一下其他作者的文章,了解一下Protobuf: htt ...
- Protocol Buffer使用转换工具将proto文件转换成Java文件流程及使用
Client与Server的网络通信协议传输使用google protobuf,服务器端使用的是Java 一. Protocol Buffersprotobuf全称Google Protocol Bu ...
- 后端程序员之路 39、一个Protocol Buffer实例
实际工作的Protocol Buffer使用经验 # 写proto文件- 协议版本 项目用的是protobuf2,所以要指定 syntax = "proto2";- 包名 pack ...
随机推荐
- WCF之多个终结点
1.服务端配置如下(一个Service节点下可有多个endpoint,): <system.serviceModel> <services> <service name= ...
- alt text 与 tooltip区别
在做工具的Accessiblity测试时, 对于image对象,一直分不清它的alt属性与tooltip属性的区别与用法, 从网上查了下, 比较认同这样的观点: alt属性: alternative ...
- NSNumber 、 NSValue 、 日期处理 、 集合类 、 NSArray(一)
1 基本数据类型的封装 1.1 问题 我们所学的所有基本数据类型,如int.float.double.char等,都不是对象,不能向它们发送消息.然而,在Foundation中的许多类,如NSArra ...
- 1.NSThread
前言 每个iOS应用程序都有个专门用来更新显示UI界面.处理用户触摸事件的主线程,因此不能将其他太耗时的操作放在主线程中执行,不然会造成主线程堵塞(出现卡机现象),带来极坏的用户体验.一般的解决方案就 ...
- val() 和attr() 取值的问题
- 《JS高程》对象&原型学习笔记
ECMA-262 把对象定义为:”无序属性的集合,其属性可以包含基本值.对象或者函数.”可以把 ECMAScript 的对象想象成散列表:无非就是一组名值对,其中值可以是数据或函数. 6.1.理解 ...
- ReentrantLock获取锁方式解读(转)
原文地址:http://www.zhihu.com/question/36771163 (一) lock()方法获取锁.如果该锁没有被另一个线程保持,则获取该锁并立即返回,将锁的保持计数设置为 1.如 ...
- Java Super 覆盖方法
子类从父类中继承方法,有时候,子类需要修改父类中定义的方法的实现,这称作方法覆盖. 比如,GeometricObject类中的toString方法返回表示集合对象的字符串,这个方法就可以被覆盖,返回表 ...
- Highcharts的基本属性和方法详解
Highcharts 是一个用纯JavaScript编写的一个图表库, 能够很简单便捷的在web网站或是web应用程序添加有交互性的图表,并且免费提供给个人学习.个人网站和非商业用途使用. 目前Hig ...
- 感知机-Python实现
如图3所示的训练数据集,其正实例点是(3,3),(3,4),负实例点是(1,1),试用感知机学习算法的原始形式求感知机模型,即求出w和b.这里, 图3 这里我们取初值,取.具体问题解释不写了,求解的方 ...