protobuf序列化使用說明


protobuf轉換方法

  1. 編寫protobuf代碼如下:
package netty;
option java_package = "com.clq.netty.protoc";
option java_outer_classname = "SubsribeReqProto";

message SubScribeReq{
    required int32 subReqID = 1;
    required string userName = 2;
    required string productName = 3;
    repeated string address = 4;
}
package netty;
option java_package = "com.clq.netty.protoc";
option java_outer_classname = "SubsribeRespProto";

message SubScribeResp{
    required int32 subReqID = 1;
    required string respCode = 2;
    required string desc = 3;
}

2 . 執行如下命令(首先下載proto.exe 地址:https://download.csdn.net/download/u012516914/10564014):

E:\tmp\protoc-2.5.0-win32> ./protoc.exe --java_out=./ SubscribeReq.proto
E:\tmp\protoc-2.5.0-win32> ./protoc.exe --java_out=./ SubscribeResp.proto

3 . 拷貝生成代碼到IDE編輯器,下載地址見:https://download.csdn.net/download/u012516914/10564014 如果報錯,則添加protobuf-java

        <dependency>
            <groupId>com.google.protobuf</groupId>
            <artifactId>protobuf-java</artifactId>
            <version>2.5.0</version>
        </dependency>

4 . 執行測試protobuf測試

package com.clq.netty.protoc;

import com.google.protobuf.InvalidProtocolBufferException;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by clq on 2018/7/24.
 */
public class TestSubsribeReqProto {
    private static byte[] encode(SubsribeReqProto.SubScribeReq req) {
        return req.toByteArray();
    }

    private static SubsribeReqProto.SubScribeReq decode(byte[] body) throws InvalidProtocolBufferException {
        return SubsribeReqProto.SubScribeReq.parseFrom(body);
    }

    private static SubsribeReqProto.SubScribeReq createSubScripeReq() {
        SubsribeReqProto.SubScribeReq.Builder builder = SubsribeReqProto.SubScribeReq.newBuilder();
        builder.setSubReqID(1);
        builder.setUserName("clq");
        builder.setProductName("xxxx usb key");
        List<String> address = new ArrayList<>();
        address.add("河南鄭州");
        address.add("河南洛陽");
        builder.addAllAddress(address);
        return builder.build();
    }

    public static void main(String[] args) {
        SubsribeReqProto.SubScribeReq subScripeReq = createSubScripeReq();
        System.out.println("Before encode:" + subScripeReq.toString());
        SubsribeReqProto.SubScribeReq subScripeReq1 = createSubScripeReq();
        System.out.println("After encode:" + subScripeReq1);
        System.out.println("Assert equ:" + subScripeReq1.equals(subScripeReq));

    }
}

5 . 打印結果

Before encode:subReqID: 1
userName: "clq"
productName: "xxxx usb key"
address: "\346\262\263\345\215\227\351\203\221\345\267\236"
address: "\346\262\263\345\215\227\346\264\233\351\230\263"

After encode:subReqID: 1
userName: "clq"
productName: "xxxx usb key"
address: "\346\262\263\345\215\227\351\203\221\345\267\236"
address: "\346\262\263\345\215\227\346\264\233\351\230\263"

Assert equ:true
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章