protobuf java小栗子

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值