Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。目前提供了 C++、Java、Python 三种语言的 API。
使用步骤:
1.下载附件中的protobuf-2.5.0.rar
解压后有两个文件:protobuf-java-2.5.0.jar和protoc.exe。
protobuf-java-2.5.0.jar是protobuf依赖的jar包,添加到lib目录下;如果是maven工程,则忽略此包,给pom.xml文件中添加以下代码:
<dependency> <groupId>com.google.protobuf</groupId> <artifactId>protobuf-java</artifactId> <version>2.5.0</version> </dependency>
protoc.exe是protobuf代码生成工具。
2.定义proto数据格式
首先我们需要编写一个 proto 文件,定义我们程序中需要处理的结构化数据,在 protobuf 的术语中,结构化数据被称为 Message。proto 文件非常类似 java 或者 C 语言的数据定义。创建person_msg.proto文件:
option java_package = "com.tracy.proto"; option java_outer_classname = "PersonMsgProtos"; message Person { // ID(必需) required int32 id = 1; // 姓名(必需) required string name = 2; // email(可选) optional string email = 3; // 朋友(集合) repeated string friends = 4; }
上述代码中, option java_package指的是生成的java代码所在的包,java_outer_classname指的是生成的java文件类名称。
3.使用proto.exe生成java代码
生成java代码有两种方式:
(1) cmd命令行运行
protoc.exe --java_out=E:\java person_msg.proto
输入文件是person_msg.proto,也就是定义数据结构的文件;输出文件夹是E:\java,将java文件生成在E:\java中。运行命令成功后会生成PersonMsgProtos.java
(2)在eclipse中配置插件protobuf-dt
在eclipse marketplace中搜索protobuf-dt,该插件由google提供,如果电脑配置了vpn,则可正常下载该插件;
否则,请在github中网友提供的地址下载该插件,地址为:https://github.com/junit/protobuf-dt
配置方式请参考该地址:http://www.360doc.com/content/14/0718/15/16044571_395291178.shtml
使用proto.exe生成的java部分代码如下:
// Generated by the protocol buffer compiler. DO NOT EDIT! // source: main/java/com/tracy/proto/person_msg.proto package com.tracy.proto; public final class PersonMsgProtos { private PersonMsgProtos() {} public static void registerAllExtensions( com.google.protobuf.ExtensionRegistry registry) { } public interface PersonOrBuilder extends com.google.protobuf.MessageOrBuilder { // required int32 id = 1; /** * <code>required int32 id = 1;</code> * * <pre> * ID(必需) * </pre> */ boolean hasId(); /** * <code>required int32 id = 1;</code> * * <pre> * ID(必需) * </pre> */ int getId(); // required string name = 2; /** * <code>required string name = 2;</code> * * <pre> * 姓名(必需) * </pre> */ boolean hasName();
4.序列化与反序列化
一般来说,序列化和反序列化是分开的。例如网络传输,由一方将数据序列化后发送给另一方来接收并解析,序列化发送和接收反序列化并不在一起。以下例子为了简单将二者写在同一程序中。
public class ProtoTest { public static void main(String[] args) throws IOException{ // 按照定义的数据结构,创建一个Person PersonMsgProtos.Person.Builder personBuilder = PersonMsgProtos.Person.newBuilder(); personBuilder.setId(1); personBuilder.setName("tracy"); personBuilder.setEmail("tracy_cui@xxx.com"); personBuilder.addFriends("wang"); personBuilder.addFriends("yang"); PersonMsgProtos.Person person = personBuilder.build(); // 序列化 byte[] byteArray = person.toByteArray(); // 反序列化 PersonMsgProtos.Person parsePerson = PersonMsgProtos.Person.parseFrom(byteArray); List<String> friendsList = parsePerson.getFriendsList(); for(String friend : friendsList){ System.out.println("friend:" + friend); } } }
本项目完整代码已使用git托管,地址:https://coding.net/u/tracywen/p/protobuf/git
相关推荐
赠送jar包:protobuf-java-3.11.4.jar; 赠送原API文档:protobuf-java-3.11.4-javadoc.jar; 赠送源代码:protobuf-java-3.11.4-sources.jar; 赠送Maven依赖信息文件:protobuf-java-3.11.4.pom; 包含翻译后的API...
protobuf-java完整包(jar+source...2. 在eclipse的java项目的buildpath添加java-protobuf.jar,即可用java调用protubuf库。 (资源难得,网上的资源要么不全,要么版本不一致。这样是无法正常编译和调用protobuf的。)
赠送jar包:protobuf-java-3.16.1.jar; 赠送原API文档:protobuf-java-3.16.1-javadoc.jar; 赠送源代码:protobuf-java-3.16.1-sources.jar; 赠送Maven依赖信息文件:protobuf-java-3.16.1.pom; 包含翻译后的API...
赠送jar包:protobuf-java-3.7.1.jar; 赠送原API文档:protobuf-java-3.7.1-javadoc.jar; 赠送源代码:protobuf-java-3.7.1-sources.jar; 赠送Maven依赖信息文件:protobuf-java-3.7.1.pom; 包含翻译后的API文档...
protobuf-java-3.2.0.jar
protobuf-java-2.4.1.jar
protobuf-java-3.1.0.jar
赠送jar包:protobuf-java-3.11.4.jar; 赠送原API文档:protobuf-java-3.11.4-javadoc.jar; 赠送源代码:protobuf-java-3.11.4-sources.jar; 赠送Maven依赖信息文件:protobuf-java-3.11.4.pom; 包含翻译后的API...
赠送jar包:protobuf-java-2.5.0.jar; 赠送原API文档:protobuf-java-2.5.0-javadoc.jar; 赠送源代码:protobuf-java-2.5.0-sources.jar; 赠送Maven依赖信息文件:protobuf-java-2.5.0.pom; 包含翻译后的API文档...
赠送jar包:protobuf-java-util-shaded-351-0.9.jar; 赠送原API文档:protobuf-java-util-shaded-351-0.9-javadoc.jar; 赠送源代码:protobuf-java-util-shaded-351-0.9-sources.jar; 赠送Maven依赖信息文件:...
赠送jar包:protobuf-java-util-shaded-351-0.9.jar; 赠送原API文档:protobuf-java-util-shaded-351-0.9-javadoc.jar; 赠送源代码:protobuf-java-util-shaded-351-0.9-sources.jar; 赠送Maven依赖信息文件:...
赠送jar包:protobuf-java-3.8.0.jar; 赠送原API文档:protobuf-java-3.8.0-javadoc.jar; 赠送源代码:protobuf-java-3.8.0-sources.jar; 赠送Maven依赖信息文件:protobuf-java-3.8.0.pom; 包含翻译后的API文档...
赠送jar包:protobuf-java-shaded-351-0.9.jar; 赠送原API文档:protobuf-java-shaded-351-0.9-javadoc.jar; 赠送源代码:protobuf-java-shaded-351-0.9-sources.jar; 赠送Maven依赖信息文件:protobuf-java-...
Protocol Buffers被定义为一种数据描述语言(Data Description Language,DDL),广泛的应用于Google内部,用于结构... 本jar包为最新的protobuf的java开发包,可以直接进行使用,不需重新生成自己的java的jar包了~~~~
protoc.exe和protobuf-java-2.5.0.jar集合 可以将proto文件直接转换成java文件
protobuf-java-3.5.1.zip pherl released this on 21 Dec 2017 · 18 commits to 3.5.x since this release
Protobuf在Java中的简单使用,包括一个使用步骤文档、protoc.exe编译程序、protobuf2.5.0.jar包,和一个Java测试程序: http://blog.csdn.net/yaoyuanyylyy/article/details/36416617
ProtocolBuffer是用于结构化数据串行化的灵活、高效、自动的方法,有如XML,不过它更小、更快、也更简单。你可以定义自己的数据结构,...protobuf-java-3.2.0.jar包 太难找了,只能是自己发布一个jar包 特此分享出来
Protobuf协议,java开发相关资源.包含jar、exe、使用帮助等.
protobuf实例 protobuf-java-2.4.1.jar