大家要先下载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实例的更多相关文章

  1. [翻译]Protocol Buffer 基础: C++

    目录 Protocol Buffer Basics: C++ 为什么使用 Protocol Buffers 在哪可以找到示例代码 定义你的协议格式 编译你的 Protocol Buffers Prot ...

  2. Protocol Buffer技术详解(Java实例)

    Protocol Buffer技术详解(Java实例) 该篇Blog和上一篇(C++实例)基本相同,只是面向于我们团队中的Java工程师,毕竟我们项目的前端部分是基于Android开发的,而且我们研发 ...

  3. Protocol Buffer序列化Java框架-Protostuff

    了解Protocol Buffer 首先要知道什么是Protocol Buffer,在编程过程中,当涉及数据交换时,我们往往需要将对象进行序列化然后再传输.常见的序列化的格式有JSON,XML等,这些 ...

  4. Protocol Buffer技术详解(C++实例)

    Protocol Buffer技术详解(C++实例) 这篇Blog仍然是以Google的官方文档为主线,代码实例则完全取自于我们正在开发的一个Demo项目,通过前一段时间的尝试,感觉这种结合的方式比较 ...

  5. Protocol Buffer序列化对比Java序列化.

    初识 Protocol Buff是谷歌推出的一种序列化协议. 而Java序列化协议也是一种协议. 两者的目的是, 将对象序列化成字节数组, 或者说是二进制数据, 那么他们之间有什么差异呢. proto ...

  6. Protocol Buffer序列化/反序列化---初体验(java版)

    今天闲遐时学习了 Protocol Buffer 在网上看到了许多资料,其中不泛精品,想要详细了解的请看文章结尾的友情链接,我这里就做加深印象,快速入门的一个完整的demo,仅此而已. 学完你可以得到 ...

  7. Java与C++进行系统间交互:Protocol Buffer

    在一次项目中,因笔者负责的java端应用需要与公司C++系统进行交互,公司选定Protocol Buffer方案,故简单的了解一下 有需要的可以看一下其他作者的文章,了解一下Protobuf: htt ...

  8. Protocol Buffer使用转换工具将proto文件转换成Java文件流程及使用

    Client与Server的网络通信协议传输使用google protobuf,服务器端使用的是Java 一. Protocol Buffersprotobuf全称Google Protocol Bu ...

  9. 后端程序员之路 39、一个Protocol Buffer实例

    实际工作的Protocol Buffer使用经验 # 写proto文件- 协议版本 项目用的是protobuf2,所以要指定 syntax = "proto2";- 包名 pack ...

随机推荐

  1. MySQL 添加列,修改列,删除列

    创建后表的修改 alter table 语句用于创建后对表的修改, 基础用法如下: 添加列 基本形式: alter table 表名 add 列名 列数据类型 [after 插入位置]; 示例: 在表 ...

  2. OpenFlow Switch学习笔记(五)——Group Table、Meter Table及Counters

    本文主要详述OpenFlow Switch的另外两个主要组件——Group Table和Meter Table,它们在整个OpenFlow Swtich Processing中也起到了重要作用. 1. ...

  3. (实用篇)php精确的统计在线人数的方法

    这是一个非常精确的,通过php实现统计在线人数的方法,想知道怎么实现的请耐心阅读. <?php $filename='online.txt';//数据文件 $cookiename='VGOTCN ...

  4. R 读取clipboard内容 (MAC)

    在mac上,R读取复制的data.很简单,一行命令 read.table(pipe("pbpaste"))

  5. Sublime text2如何设置快捷键让编写的HTML文件在浏览器预览?

    著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:浪人链接:http://www.zhihu.com/question/27219231/answer/43608776来源:知 ...

  6. 1password密码文件重装后恢复

    因为重装系统,加上Time machine硬盘损坏. 只能从之前零散Time machine的恢复数据中找到最近的一个备份. 1password是会自己执行备份的,起备份文件在 ~/Library/C ...

  7. Codeforces Round #298 (Div. 2) B. Covered Path

    题目大意: 一辆车,每秒内的速度恒定...第I秒到第I+1秒的速度变化不超过D.初始速度为V1,末速度为V2,经过时间t,问最远能走多远. 分析 开始的时候想麻烦了.讨论了各种情况.后来发现每个时刻的 ...

  8. UDP 打洞 原理解释

    终于找到了一份满意的UDP打洞原理解释,附上正文,自己整理了一下源码 3.3. UDP hole punching UDP打洞技术 The third technique, and the one o ...

  9. Android中GC_EXTERNAL_ALLOC的含义

    GC_FOR_MALLOC means that the GC was triggered because there wasn't enough memory left on the heap to ...

  10. SAP 审计

    SAP 权限审计:SA38--- RSUSR002 还有其它事务码待续,,,