protobuf轉換方法
- 編寫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