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
  • Drizzt0878
  • Drizzt0878
  • 2015年11月18日 16:30
  • 376

protobuf 简单入门

1. 概述  protobuf(Protocol Buffers )是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协...
  • Jeanphorn
  • Jeanphorn
  • 2015年08月05日 10:02
  • 2753

protobuf for java 的使用

http://hi.baidu.com/austincao/item/1663f219d96f3c1fe2f986f4      这个链接是 protobuf  for java 的入门教程,我们可...
  • wangzongze1986
  • wangzongze1986
  • 2013年02月18日 17:00
  • 1935

Java与Javascript交互(使用Protobuf协议)

1. 定义协议 .proto代码package xmty; option java_package = "comcom.xmty.java"; //定义包 option java_outer_clas...
  • changqing5818
  • changqing5818
  • 2015年11月25日 15:45
  • 2265

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

概念 1.什么是protocol buffer ProtocolBuffer是用于结构化数据串行化的灵活、高效、自动的方法,有如XML,不过它更小、更快、也更简单。你可以定义自己的数据结构,然后使...
  • z69183787
  • z69183787
  • 2016年09月20日 17:39
  • 1930

protobuf java 反射

需求: 线上需要一份数据,这份数据是存储在hbase中的(比如对于某一个实体,其各个字段是存储在hbase的各个列的)。而希望最终导出的文件的每一行是一个 protobuf 的message,以方便...
  • wschli
  • wschli
  • 2015年11月13日 19:00
  • 1400

Protobuf协议的Java应用例子

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

ZJNU——1695(分栗子)

分栗子 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 90   Accepted: 18...
  • ACMer_hades
  • ACMer_hades
  • 2015年02月27日 18:31
  • 1204

Google Protobuf java 序列化工具的使用

Google Protobuf java 序列化工具的使用why? 使用Java序列化。这是默认的方法,效率比较低。 将数据序列化为XML。这种方法可能非常有吸引力,因为XML是(可能的)人类可读的,...
  • u012881904
  • u012881904
  • 2017年03月30日 19:48
  • 1909

protobuf java中的使用

Protobuf在Java中的简单使用   1.      在Java中使用protobuf需要jar包,下载protobuf-Java-2.5.0.jar包文件,添加到项目中。另外需要proto...
  • u010129251
  • u010129251
  • 2015年03月26日 15:43
  • 7430
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:protobuf java小栗子
举报原因:
原因补充:

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