`
身心不坚强
  • 浏览: 36792 次
  • 性别: Icon_minigender_2
  • 来自: 西安
社区版块
存档分类
最新评论

protobuf在java中的使用及其在eclipse中的配置

    博客分类:
  • Java
 
阅读更多

    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

 

 

分享到:
评论

相关推荐

    eclipse 使用 protobuf-java-2.4.1.jar java

    标题中的“eclipse 使用 protobuf-java-2.4.1.jar java”表明我们将讨论如何在Eclipse集成开发环境中使用Google的Protocol Buffers(protobuf)库,具体版本为2.4.1,该库以Java类库的形式提供,即protobuf-java-...

    protobuf-java-3.11.4-API文档-中文版.zip

    赠送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-3.7.1-API文档-中文版.zip

    赠送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.16.1-API文档-中文版.zip

    赠送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...

    protobuf-java-2.5.0jar包

    3. 在Java代码中使用:生成的Java类可以直接在项目中使用,进行数据的序列化和反序列化操作。例如: ```java Person person = Person.newBuilder() .setName("John Doe") .setId(1234) .setEmail("john.doe@...

    protobuf-java完整包(jar+source+javadoc)

    protobuf-java完整包(jar+source...2. 在eclipse的java项目的buildpath添加java-protobuf.jar,即可用java调用protubuf库。 (资源难得,网上的资源要么不全,要么版本不一致。这样是无法正常编译和调用protobuf的。)

    protobuf-java-3.11.4-API文档-中英对照版.zip

    赠送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...

    protoc.exe和protobuf-java-3.6.1集合

    开发者在项目中引入这个库,就可以在Java代码中使用protobuf的序列化和反序列化功能,进行数据的编码和解码。 在实际开发中,使用protobuf有以下几个步骤: 1. **定义数据结构**:在.proto文件中,使用protobuf...

    protobuf-java-3.5.1.jar+protoc.exe哦

    这个版本的jar文件适用于Java 8及以上版本,确保在Java项目中使用protobuf时的兼容性。 `protoc.exe`是protobuf编译器,它能读取.proto文件,并根据文件中的定义生成对应语言的源代码。对于Java项目,protoc会生成...

    protobuf-java-3.5.0 jar包

    包含protobuf-java-3.5.0.jar,protobuf-java-util-3.5.0.jar以及对应的javadoc和sources 还有对应版本所有平台的的protoc。 需要其他版本的请进我CSDN空间查看。包齐全 站内搜出来的都40 50个币 漫天要价。自己折腾...

    Protobuf生成java类

    - 编译完成后,会在指定目录下生成对应的Java源代码文件,这些文件可以直接导入到Java项目中使用。 5. **序列化与反序列化**: - 序列化:使用生成的Java类的`toByteArray()`方法将对象转换为字节数组,适合在...

    Protobuf3.4 java

    3. 在Java代码中使用:导入生成的类,创建和操作数据对象,然后可以轻松地编码到二进制流或从二进制流解码。 4. 进行网络通信:如果需要跨进程或跨机器通信,可以将Protobuf序列化后的数据通过HTTP、gRPC(基于...

    protobuf序列化JAVA使用的JAR包V3.15

    在Java中使用protobuf,首先需要在项目中引入protobuf-java-3.15-jar这个依赖。然后,定义.proto文件来描述数据结构,这是protobuf的核心部分。.proto文件包含了一系列的消息类型定义,类似于XML Schema或C++的...

    protobuf-java-2.5.0.jar

    已经编译好了的protobuf-java.jar文件。

    protobuf实例protobuf-java-2.4.1.jar

    在实际使用中,你需要将protobuf-java-2.4.1.jar添加到项目类路径中,这样就可以使用protobuf的API进行数据序列化和反序列化操作。例如: ```java Person person = Person.newBuilder() .setName("张三") .setId...

    protobuf--java-3.2.0.jar & protoc-3.2.0-windows-x86_32.exe

    开发者在Java项目中引入这个jar包,就可以在Java程序中使用protobuf API来编码和解码protobuf消息。 使用步骤: - 定义.proto文件,其中包含protobuf消息类型和字段的定义。 - 使用protoc编译器(即将讨论的工具...

    protobuf-java-3.2.0.jar

    protobuf-java-3.2.0.jar

    protobuf-java-2.4.1

    protobuf-java-2.4.1.jar

    protobuf-java-3.1.0.jar

    protobuf-java-3.1.0.jar

    Protobuf 2.5.0 在Java中的简单使用

    Protobuf在Java中的简单使用,包括一个使用步骤文档、protoc.exe编译程序、protobuf2.5.0.jar包,和一个Java测试程序: http://blog.csdn.net/yaoyuanyylyy/article/details/36416617

Global site tag (gtag.js) - Google Analytics