protobuf java小栗子

原创 2015年11月17日 17:05:51

protobuf java小栗子

近来在项目中发现用到了Protocol Buffers,作为netty传输的协议,通过写个例子进行感受下其高效的序列化和反序列化~

1. 所用环境windows ,语言java

下载生成器与对应版本的jar包
当前例子所用:protoc.exe, protobuf-java-2.4.1.jar

2. 编写proto文件,例子如下:

package org.demo.protobuf;
option java_package = "org.demo.protobuf";
option java_outer_classname = "MsgSendProto";

message MsgSend {
  required string msgID = 1;
  required string phone = 2;
  required int64 doneTime = 3;
  required int32 enterpriseID = 4;
  optional string enterpriseName = 5;
  required int32 result = 6;
  required int32 channelID = 7;
  required int32 carrier = 8;
  required int32 busyType = 9;
  optional int32 size = 10;
  optional int32 unit = 11;
}

3. 在protoc.exe所在目录打开cmd,用以下命令执行编译刚刚编写proto文件,成功后无消息输出,在相应的目录下会产生java文件MsgSendProto.java

protoc.exe --java_out=./ MsgSend.proto

这里写图片描述

4. 在工程中导入protobuf-java-2.4.1.jar,编写个简单的测试类,感受下其序列化与反序列化~

public class MsgSendProtoBufTest {
    public static void main(String[] args) {
        // 先进行序列化
        MsgSendProto.MsgSend.Builder builder = MsgSendProto.MsgSend.newBuilder();
        builder.setMsgID("20151101");
        builder.setPhone("13100000000");
        builder.setDoneTime(System.currentTimeMillis());
        builder.setEnterpriseID(1);
        builder.setEnterpriseName("enterprise");
        builder.setResult(1);
        builder.setChannelID(1);
        builder.setCarrier(1);
        builder.setBusyType(1);
        builder.setSize(5);
        builder.setUnit(1);
        MsgSendProto.MsgSend msgSend = builder.build();
        byte[] buf = msgSend.toByteArray();
        try {
            // 再反序列化输出看看
            MsgSendProto.MsgSend msgReceive = MsgSendProto.MsgSend.parseFrom(buf);
            System.out.println(msgReceive.toString());
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println(buf);
    }
}

结果输出,表明能正常序列化与反序列化~
这里写图片描述

结合Netty与Protobuf小栗子

结合Netty与Protobuf

第20天 Java中的常见的异常类和异常处理(有栗子)

Java中常见的异常类型有以下几类: 下面再简单介绍一下这几个异常类: 1.ArithmeticException类 该类用于描述算术异常,比如当除0时,会抛出该异常。int re=10/0...

Java_log2000_一个有趣的重载函数栗子

今天主要想讨论一下C++时我就很迷糊的重载函数的概念Java是支持重载的,我们通过一个简单的栗子来看一下它的机制package float_or_double;public class FloatOr...

Java_log2000_重载函数之前的栗子再扩展

前面在这篇博客里面已经试验了一下Java的函数重载,今天再扩展一下 问:当形参在byte,short,long,int之间选时,会输出哪个? 示例代码(在上一篇的基础上修改)package flo...

java核心技术I 第三章栗子 + HDU2029 回文

每年存一些钱然后,每年会得到

java核心技术 第三章代码栗子

栗子 lotteryOdds: 代码:

举个小栗子解释java动态代理

假设老板有个服务:用户说他自己的名字(xxx)。服务要对其说hello xxx. 老板便买了个机器人来执行这个服务。那么我们先定义一个服务类型接口:interface HelloService{ ...

Protobuf协议的Java应用例子

Protobuf协议,全称:Protocol Buffer 它跟JSON,XML一样,是一个规定好的数据传播格式。不过,它的序列化和反序列化的效率太变态了…… 来看看几张图你就知道它有多变态。 ...
  • antgan
  • antgan
  • 2016年08月03日 15:20
  • 20719

一种java对象转换成protobuf对象通用方法

protobuf的优势这里就不细说了,这里给java开发童鞋们分享一个可以将普通java对象转换成.proto生成的java对象的方法,大家在编写完.proto文件后生成java对象后,肯定都遇到过一...

Java数据通讯中使用Google Protobuf 序列化与反序列化

概念 1.什么是protocol buffer ProtocolBuffer是用于结构化数据串行化的灵活、高效、自动的方法,有如XML,不过它更小、更快、也更简单。你可以定义自己的数据结构,然后使...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:protobuf java小栗子
举报原因:
原因补充:

(最多只允许输入30个字)