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);
    }
}

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

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

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

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

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

android与PC,C#与Java 利用protobuf 进行无障碍通讯【Socket】

2011-04-23 14:52 by Terry_龙, 805 visits, 网摘, 收藏, 编辑protobuf 是什么? Protocol buffers是一种编码方法构造的一种有效而可扩展的...

android与PC,C#与Java 利用protobuf 进行无障碍通讯【Socket】

protobuf 是什么?   Protocol buffers是一种编码方法构造的一种有效而可扩展的格式的数据。 谷歌使用其内部几乎RPC协议和文件格式的所有协议缓冲区。 ...

android与PC,C#与Java 利用protobuf 进行无障碍通讯【Socket】

android与PC,C#与Java 利用protobuf 进行无障碍通讯【Socket】 protobuf 是什么? Protocol buffers是一种编码方法构造的一种...

【protocol buffers】java解析protoBuf custom option自定义扩展文件具体方法

一、前言   由于需要解析自定义扩展,获取对应的信息,方便以后扩展,需要解析,上网找了很久木有找到解决办法,而且官方的文档(https://developers.google.com/protocol...

java调用Hbase API 出现org.apache.hadoop.hbase.protobuf.generated.ClientProtos$Result overrides final 错误

java.io.IOException: java.lang.reflect.InvocationTargetException     at org.apache.hadoop.hbase.cli...
  • IT_xhf
  • IT_xhf
  • 2014-07-19 16:51
  • 5332

Protobuf协议的Java应用例子

Protobuf协议,全称:Protocol Buffer  它跟JSON,XML一样,是一个规定好的数据传播格式。不过,它的序列化和反序列化的效率太变态了…… 转自 : http://b...

Protobuf笔记以及Java Js 示例

Google Protocol Buffer1.协议介绍:Google Protocol Buffer是google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了多种语言的实现...

protobuf的配置原始文件.proto中,使用修饰符repeated、required、optional生成的java文件的区别

最近在做一个基于Netty框架的项目。 该项目使用了Google的Protobuf作为编解码的框架。(没有使用XML或者json是为了更好的提高效率)。 经过了一段时间的使用我对Protobuf的原始...
  • lxlhu
  • lxlhu
  • 2015-04-20 11:01
  • 2359
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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