热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ProtocolBufferJava实例

大家要先下载protobuffer,在这里:https:code.google.compprotobufdownloadslist注意,需要下载两个,一个是complier,另外一

大家要先下载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实例


推荐阅读
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • (三)多表代码生成的实现方法
    本文介绍了一种实现多表代码生成的方法,使用了java代码和org.jeecg框架中的相关类和接口。通过设置主表配置,可以生成父子表的数据模型。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
author-avatar
黎世江
这个家伙很懒,什么也没留下!