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("[email protected]");
        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());
    }

}
时间: 2025-01-07 19:42:12

Protocol Buffer Java实例的相关文章

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

Protocol Buffer Basics: C++ [TOC] 这篇教程提供了一个面向 C++ 程序员.关于 protocol buffers 的基础介绍.通过创建一个简单的示例应用程序,它将向我们展示: 在 .proto 文件中定义消息格式 使用 protocol buffer 编译器 使用 C++ protocol buffer API 读写消息 这不是一个关于使用 C++ protocol buffers 的全面指南.要获取更详细的信息,请参考 Protocol Buffer Lang

Protocol Buffer技术详解(Java实例)

Protocol Buffer技术详解(Java实例) 该篇Blog和上一篇(C++实例)基本相同,只是面向于我们团队中的Java工程师,毕竟我们项目的前端部分是基于Android开发的,而且我们研发团队中目前主要使用的开发语言就是C++.Java和Python,其中Python主要用于编写各种工具程序.然而为了保证该篇Blog的完整性和独立性,我仍然会将上一篇Blog中已经出现的内容再一次赘述,同时对于Java中特有的部分也会着重介绍.          一.生成目标语言代码.      下面

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

http://www.cnblogs.com/stephen-liu74/archive/2013/01/04/2842533.html 这篇Blog仍然是以Google的官方文档为主线,代码实例则完全取自于我们正在开发的一个Demo项目,通过前一段时间的尝试,感觉这种结合的方式比 较有利于培训和内部的技术交流.还是那句话,没有最好的,只有最适合的.我想写Blog也是这一道理吧,不同的技术主题可能需要采用不同的风格.好了,还 是让我们尽早切入主题吧.          一.生成目标语言代码.  

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

实际工作的Protocol Buffer使用经验 # 写proto文件- 协议版本 项目用的是protobuf2,所以要指定 syntax = "proto2";- 包名 package xxx_yyy;- 优化选项 option optimize_for=LITE_RUNTIME;- 导入其它依赖的proto import "typea.proto";- message定义    - required定义必选    - repeated定义重复项,底层实现一般是l

Apache Thrift with Java Quickstart(thrift入门及Java实例)

thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 这些编程语言间无缝结合的.高效的服务. 1. 概述 Thrift最初由facebook开发,07年四月开放源码,08年5月进入apache孵化器.thrift允许你定义一个

protocol buffer介绍(protobuf)

一.理论概述0.参考资料入门资料:https://developers.google.com/protocol-buffers/docs/javatutorial更详细的资料:For more detailed reference information, see the Protocol Buffer Language Guide, the Java API Reference, the Java Generated Code Guide, and the Encoding Reference

netty4与protocol buffer结合简易教程

各项目之间通常使用二进制进行通讯,占用带宽小.处理速度快~ 感谢netty作者Trustin Lee.让netty天生支持protocol buffer. 本实例使用netty4+protobuf-2.5.0.在win7下运行.而且如果已经安装jdk和maven. 1.下载并解压protoc-2.5.0-win32.zip和protobuf-2.5.0.zip 2.到protobuf-2.5.0.zip安装文件夹protobuf-2.5.0\java下,运行maven命令:mvn package

【Google Protocol Buffer】Google Protocol Buffer

http://www.ibm.com/developerworks/cn/linux/l-cn-gpb/ Google Protocol Buffer 的使用和原理 Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,很适合做数据存储或 RPC 数据交换格式.它可用于通讯协议.数据存储等领域的语言无关.平台无关.可扩展的序列化结构数据格式.目前提供了 C++.Java.Python 三种语言的 API. 17 评论: 刘 明, 软件工程师, 上海交大电

快来看看Google出品的Protocol Buffer,别仅仅会用Json和XML了

前言 习惯用 Json.XML 数据存储格式的你们,相信大多都没听过Protocol Buffer Protocol Buffer 事实上 是 Google出品的一种轻量 & 高效的结构化数据存储格式,性能比 Json.XML 真的强!太! 多! 由于 Google出品,我相信Protocol Buffer已经具备足够的吸引力 今天,我将献上一份 Protocol Buffer的介绍 & 使用攻略,希望你们会喜欢. 文件夹 1. 定义 一种 结构化数据 的数据存储格式(相似于 `XML.J