Mac下安装protobuf以及简单使用

1.安装

brew install protobuf

2.查看安装版本

➜  protobuf git:(dev) ✗ protoc --version
libprotoc 3.4.0
➜  protobuf git:(dev) ✗ 

3.生成Prtobuf文件


➜  java git:(dev) ✗ protoc --java_out=./ com/test/frame/zookeeper/protobuf/SubscribeReq.proto
➜  java git:(dev) ✗ pwd
/Users/guanguan/study/frame/zookeeper/src/main/java
➜  java git:(dev) ✗ 

4.如果遇到以下问题

➜  protobuf git:(dev) ✗ sudo protoc --java_out=./ SubscribeReq.proto                  
[libprotobuf WARNING google/protobuf/compiler/parser.cc:546] No syntax specified for the proto file: SubscribeReq.proto. Please use 'syntax = "proto2";' or 'syntax = "proto3";' to specify a syntax version. (Defaulted to proto2 syntax.)

解决方案,将syntax ="proto2"或者syntax="proto3"放到.proto文件前面即可解决如(SubscribeReq.proto)



syntax = "proto2";

package com.test.frame.zookeeper.protobuf;
option java_package="com.test.frame.zookeeper.protobuf";
option java_outer_classname="SubscribeReqProto";


message SubscribeReq{
   required int32 subReqID=1;
   required string userName=2;
   required string productName=3;
   required string address=4;


}

5.pom.xml文件中增加依赖


        <!-- https://mvnrepository.com/artifact/com.google.protobuf/protobuf-java -->
        <dependency>
            <groupId>com.google.protobuf</groupId>
            <artifactId>protobuf-java</artifactId>
            <version>3.4.0</version>
        </dependency>

6.测试编解码效果TestSubcribeReq.java

package com.test.frame.zookeeper.protobuf;

import com.google.protobuf.InvalidProtocolBufferException;

/**
 * TestSubscribeReqProto class
 *
 * @author guanhuifang
 * @date 2017/10/30 下午4:35
 **/
public class TestSubscribeReqProto {


    /**
     * 编码encode
     *
     * 将SubscribeReq类型的转为字节数组
     * @param req
     * @return
     */
    private static byte[] encode(SubscribeReqProto.SubscribeReq req){
        /**
         * 编码时通过调用SubscribeReqProto.SubscribeReq实例的toByteArray即可将SubscribeReq编码为byte数组
         */
        return req.toByteArray();
    }


    /**
     * 解码
     * 将字节数组转换为SubscribeReq类型
     * @param body
     * @return
     * @throws InvalidProtocolBufferException
     */
    private static SubscribeReqProto.SubscribeReq decode(byte[] body) throws InvalidProtocolBufferException {
        /**
         * 解码时通过调用SubscribeReqProto.SubscribeReq实例的静态方法parseForm将二进制byte数组解码为原始的对象
         */
        return SubscribeReqProto.SubscribeReq.parseFrom(body);
    }

    private static SubscribeReqProto.SubscribeReq createSubscribeReq(){
        /**
         * 通过静态方法newBuilder创建Builder实例,通过Builder构建器对SubscribeReq的属性进行设置
         */
        SubscribeReqProto.SubscribeReq.Builder builder= SubscribeReqProto.SubscribeReq.newBuilder();
        builder.setSubReqID(1);
        builder.setUserName("Gholly");
        builder.setProductName("hh");

        builder.setAddress("Shenzhen");
        return builder.build();

    }

    public static void main(String[] args) throws InvalidProtocolBufferException {
        SubscribeReqProto.SubscribeReq req=createSubscribeReq();
        System.out.println("encode before:"+req.toString());
        SubscribeReqProto.SubscribeReq req2= decode(encode(req));
        System.out.println("after decode:"+req.toString());
        System.out.println(req2.equals(req));

    }



}

运行结果为:

encode before:subReqID: 1
userName: "Gholly"
productName: "hh"
address: "Shenzhen"

after decode:subReqID: 1
userName: "Gholly"
productName: "hh"
address: "Shenzhen"

true

Process finished with exit code 0

说明编解码前后数据是一样的

转载于:https://my.oschina.net/u/2263272/blog/1558593

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值