增加ProtobufConvert
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
/*
|
||||
* To change this license header, choose License Headers in Project Properties.
|
||||
* To change this template file, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
package org.redkale.test.convert.protobuf;
|
||||
|
||||
import java.util.*;
|
||||
import org.redkale.util.Utility;
|
||||
import org.redkale.convert.protobuf.ProtobufConvert;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author zhangjx
|
||||
*/
|
||||
public class ArrayBean {
|
||||
|
||||
public static class IntArrayBean {
|
||||
|
||||
public int[] values1;
|
||||
}
|
||||
|
||||
public static class IntListBean {
|
||||
|
||||
public List<Integer> values2;
|
||||
}
|
||||
|
||||
public static class IntegerArrayBean {
|
||||
|
||||
public Integer[] values3;
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws Throwable {
|
||||
IntArrayBean bean1 = new IntArrayBean();
|
||||
bean1.values1 = new int[]{2, 3, 4};
|
||||
IntListBean bean2 = new IntListBean();
|
||||
bean2.values2 = Utility.ofList(2, 3, 4);
|
||||
IntegerArrayBean bean3 = new IntegerArrayBean();
|
||||
bean3.values3 = new Integer[]{2, 3, 4};
|
||||
byte[] bs1 = ProtobufConvert.root().convertTo(bean1);
|
||||
byte[] bs2 = ProtobufConvert.root().convertTo(bean2);
|
||||
byte[] bs3 = ProtobufConvert.root().convertTo(bean3);
|
||||
if (!Arrays.equals(bs1, bs2)) {
|
||||
Utility.println("int数组: ", bs1);
|
||||
Utility.println("int列表: ", bs2);
|
||||
} else if (!Arrays.equals(bs1, bs3)) {
|
||||
Utility.println("int数组: ", bs1);
|
||||
Utility.println("int集合: ", bs3);
|
||||
} else {
|
||||
System.out.println("两者相同");
|
||||
}
|
||||
IntArrayBean bean11 = ProtobufConvert.root().convertFrom(IntArrayBean.class, bs1);
|
||||
IntListBean bean22 = ProtobufConvert.root().convertFrom(IntListBean.class, bs2);
|
||||
IntegerArrayBean bean33 = ProtobufConvert.root().convertFrom(IntegerArrayBean.class, bs3);
|
||||
System.out.println(Arrays.toString(bean11.values1));
|
||||
System.out.println(bean22.values2);
|
||||
System.out.println(Arrays.toString(bean33.values3));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,231 @@
|
||||
/*
|
||||
*/
|
||||
package org.redkale.test.convert.protobuf;
|
||||
|
||||
import org.redkale.convert.protobuf.ProtobufObjectEncoder;
|
||||
import org.redkale.convert.protobuf.ProtobufReader;
|
||||
import org.redkale.convert.protobuf.ProtobufObjectDecoder;
|
||||
import org.redkale.convert.protobuf.ProtobufConvert;
|
||||
import static java.lang.annotation.ElementType.TYPE;
|
||||
import static java.lang.annotation.RetentionPolicy.RUNTIME;
|
||||
import java.lang.annotation.*;
|
||||
import java.util.Arrays;
|
||||
import java.util.function.*;
|
||||
import org.junit.jupiter.api.*;
|
||||
import org.redkale.convert.*;
|
||||
import org.redkale.convert.json.JsonConvert;
|
||||
import org.redkale.util.*;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author zhangjx
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public class PBCustMessage2Test {
|
||||
|
||||
private boolean main;
|
||||
|
||||
public static void main(String[] args) throws Throwable {
|
||||
PBCustMessage2Test test = new PBCustMessage2Test();
|
||||
test.main = true;
|
||||
test.run();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void run() throws Exception {
|
||||
final BiFunction<Attribute, Object, Object> objFieldFunc = (Attribute t, Object u) -> {
|
||||
if (t.field().equals("retinfo")) return null;
|
||||
return t.get(u);
|
||||
};
|
||||
OnPlayerLeaveMessage msg1 = new OnPlayerLeaveMessage(100, "haha");
|
||||
byte[] bs1 = ProtobufConvert.root().convertTo(msg1);
|
||||
OnPlayerLeaveMessage2 msg2 = new OnPlayerLeaveMessage2(100, "haha");
|
||||
byte[] bs2 = ProtobufConvert.root().convertTo(msg2);
|
||||
System.out.println(Arrays.toString(bs1));
|
||||
System.out.println(Arrays.toString(bs2));
|
||||
if (!main) Assertions.assertEquals(Arrays.toString(bs1), Arrays.toString(bs2));
|
||||
System.out.println();
|
||||
|
||||
OnPlayerLeaveMessage2 newmsg2 = ProtobufConvert.root().convertFrom(OnPlayerLeaveMessage2.class, bs1);
|
||||
byte[] newbs2 = ProtobufConvert.root().convertTo(newmsg2);
|
||||
System.out.println(Arrays.toString(newbs2));
|
||||
if (!main) Assertions.assertEquals(Arrays.toString(bs1), Arrays.toString(newbs2));
|
||||
System.out.println();
|
||||
|
||||
ProtobufConvert convert = ProtobufConvert.root().newConvert(objFieldFunc);
|
||||
System.out.println(Arrays.toString(convert.convertTo(msg1)));
|
||||
System.out.println(Arrays.toString(convert.convertTo(msg2)));
|
||||
if (!main) Assertions.assertEquals(Arrays.toString(convert.convertTo(msg1)), Arrays.toString(convert.convertTo(msg2)));
|
||||
System.out.println();
|
||||
}
|
||||
|
||||
public static interface BaseMessage {
|
||||
|
||||
@Inherited
|
||||
@Documented
|
||||
@Target({TYPE})
|
||||
@Retention(RUNTIME)
|
||||
public @interface MessageName {
|
||||
|
||||
String value();
|
||||
}
|
||||
|
||||
public static String getMessageName(Class<?> clazz) {
|
||||
MessageName mn = clazz.getAnnotation(MessageName.class);
|
||||
if (mn != null) return mn.value();
|
||||
char[] fieldChars = clazz.getSimpleName().toCharArray();
|
||||
fieldChars[0] = Character.toLowerCase(fieldChars[0]);
|
||||
return new String(fieldChars);
|
||||
}
|
||||
|
||||
public static Encodeable<Writer, BaseMessage> createConvertEnCoder(final ConvertFactory factory, final Class<? extends BaseMessage> clazz) {
|
||||
Encodeable valEncoder = factory.createEncoder(clazz, true);
|
||||
final String eventName = getMessageName(clazz);
|
||||
ObjectEncoder encoder = new ProtobufObjectEncoder< BaseMessage>(clazz) {
|
||||
@Override
|
||||
protected void afterInitEnMember(ConvertFactory factory) {
|
||||
Function func1 = t -> eventName;
|
||||
Attribute attribute1 = Attribute.create(clazz, "event", String.class, func1, null);
|
||||
EnMember member1 = new EnMember(attribute1, factory.loadEncoder(String.class), null, null);
|
||||
setIndex(member1, 1);
|
||||
setPosition(member1, 1);
|
||||
initForEachEnMember(factory, member1);
|
||||
|
||||
Function func2 = t -> t;
|
||||
Attribute attribute2 = Attribute.create(clazz, "data", clazz, func2, null);
|
||||
EnMember member2 = new EnMember(attribute2, valEncoder, null, null);
|
||||
setIndex(member2, 2);
|
||||
setPosition(member2, 2);
|
||||
initForEachEnMember(factory, member2);
|
||||
this.members = new EnMember[]{member1, member2};
|
||||
}
|
||||
};
|
||||
encoder.init(factory);
|
||||
return encoder;
|
||||
}
|
||||
|
||||
public static Decodeable<Reader, BaseMessage> createConvertDeCoder(final ConvertFactory factory, final Class<? extends BaseMessage> clazz) {
|
||||
Decodeable valDecoder = factory.createDecoder(clazz, true);
|
||||
final String eventName = getMessageName(clazz);
|
||||
ObjectDecoder decoder = new ProtobufObjectDecoder< BaseMessage>(clazz) {
|
||||
@Override
|
||||
protected void afterInitDeMember(ConvertFactory factory) {
|
||||
Function func1 = t -> eventName;
|
||||
Attribute attribute1 = Attribute.create(clazz, "event", String.class, func1, null);
|
||||
DeMember member1 = new DeMember(attribute1, factory.loadDecoder(String.class), null, null);
|
||||
setIndex(member1, 1);
|
||||
setPosition(member1, 1);
|
||||
initForEachDeMember(factory, member1);
|
||||
|
||||
this.creator = (Creator) objs -> new Object[1];
|
||||
Function func2 = t -> t;
|
||||
BiConsumer consumer2 = (t, v) -> ((Object[]) t)[0] = v;
|
||||
Attribute attribute2 = Attribute.create(clazz, "data", clazz, func2, consumer2);
|
||||
DeMember member2 = new DeMember(attribute2, valDecoder, null, null);
|
||||
setIndex(member2, 2);
|
||||
setPosition(member2, 2);
|
||||
initForEachDeMember(factory, member2);
|
||||
this.members = new DeMember[]{member1, member2};
|
||||
}
|
||||
|
||||
@Override
|
||||
public BaseMessage convertFrom(ProtobufReader in) {
|
||||
Object result = (Object) super.convertFrom(in);
|
||||
return (BaseMessage) ((Object[]) result)[0];
|
||||
}
|
||||
};
|
||||
decoder.init(factory);
|
||||
return decoder;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@BaseMessage.MessageName("onPlayerLeaveMessage")
|
||||
public static class OnPlayerLeaveMessage2 implements BaseMessage {
|
||||
|
||||
@ConvertColumn(index = 1)
|
||||
public int userid;
|
||||
|
||||
@ConvertColumn(index = 2)
|
||||
public String retinfo;
|
||||
|
||||
public OnPlayerLeaveMessage2() {
|
||||
}
|
||||
|
||||
public OnPlayerLeaveMessage2(int userid, String retinfo) {
|
||||
this.userid = userid;
|
||||
this.retinfo = retinfo;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return JsonConvert.root().convertTo(this);
|
||||
}
|
||||
}
|
||||
|
||||
public static class OnPlayerLeaveMessage {
|
||||
|
||||
private String event = "onPlayerLeaveMessage";
|
||||
|
||||
private OnPlayerLeaveContent result;
|
||||
|
||||
public OnPlayerLeaveMessage() {
|
||||
}
|
||||
|
||||
public OnPlayerLeaveMessage(int userid) {
|
||||
this.result = new OnPlayerLeaveContent(userid);
|
||||
}
|
||||
|
||||
public OnPlayerLeaveMessage(int userid, String retinfo) {
|
||||
this.result = new OnPlayerLeaveContent(userid, retinfo);
|
||||
}
|
||||
|
||||
public String getEvent() {
|
||||
return event;
|
||||
}
|
||||
|
||||
public void setEvent(String event) {
|
||||
this.event = event;
|
||||
}
|
||||
|
||||
public OnPlayerLeaveContent getResult() {
|
||||
return result;
|
||||
}
|
||||
|
||||
public void setResult(OnPlayerLeaveContent result) {
|
||||
this.result = result;
|
||||
}
|
||||
|
||||
public static class OnPlayerLeaveContent {
|
||||
|
||||
@ConvertColumn(index = 1)
|
||||
public int userid;
|
||||
|
||||
@ConvertColumn(index = 2)
|
||||
public String retinfo;
|
||||
|
||||
public OnPlayerLeaveContent() {
|
||||
}
|
||||
|
||||
public OnPlayerLeaveContent(int userid) {
|
||||
this.userid = userid;
|
||||
}
|
||||
|
||||
public OnPlayerLeaveContent(int userid, String retinfo) {
|
||||
this.userid = userid;
|
||||
this.retinfo = retinfo;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return JsonConvert.root().convertTo(this);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return JsonConvert.root().convertTo(this);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,204 @@
|
||||
/*
|
||||
*/
|
||||
package org.redkale.test.convert.protobuf;
|
||||
|
||||
import org.redkale.convert.protobuf.ProtobufObjectEncoder;
|
||||
import org.redkale.convert.protobuf.ProtobufReader;
|
||||
import org.redkale.convert.protobuf.ProtobufFactory;
|
||||
import org.redkale.convert.protobuf.ProtobufObjectDecoder;
|
||||
import org.redkale.convert.protobuf.ProtobufConvert;
|
||||
import java.lang.annotation.*;
|
||||
import static java.lang.annotation.ElementType.TYPE;
|
||||
import static java.lang.annotation.RetentionPolicy.RUNTIME;
|
||||
import java.util.*;
|
||||
import java.util.function.*;
|
||||
import org.junit.jupiter.api.*;
|
||||
import org.redkale.convert.*;
|
||||
import org.redkale.convert.json.JsonConvert;
|
||||
import org.redkale.util.*;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author zhangjx
|
||||
*/
|
||||
public class PBCustMessageTest {
|
||||
|
||||
private boolean main;
|
||||
|
||||
public static void main(String[] args) throws Throwable {
|
||||
PBCustMessageTest test = new PBCustMessageTest();
|
||||
test.main = true;
|
||||
test.run();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void run() throws Exception {
|
||||
final BiFunction<Attribute, Object, Object> objFieldFunc = (Attribute t, Object u) -> {
|
||||
if (t.field().equals("retinfo")) return null;
|
||||
return t.get(u);
|
||||
};
|
||||
OnPlayerLeaveMessage msg1 = new OnPlayerLeaveMessage(100, "haha");
|
||||
byte[] bs1 = ProtobufConvert.root().convertTo(msg1);
|
||||
OnPlayerLeaveMessage2 msg2 = new OnPlayerLeaveMessage2(100, "haha");
|
||||
byte[] bs2 = ProtobufConvert.root().convertTo(msg2);
|
||||
System.out.println(Arrays.toString(bs1));
|
||||
System.out.println(Arrays.toString(bs2));
|
||||
if (!main) Assertions.assertEquals(Arrays.toString(bs1), Arrays.toString(bs2));
|
||||
System.out.println();
|
||||
|
||||
OnPlayerLeaveMessage2 newmsg2 = ProtobufConvert.root().convertFrom(OnPlayerLeaveMessage2.class, bs1);
|
||||
byte[] newbs2 = ProtobufConvert.root().convertTo(newmsg2);
|
||||
System.out.println(Arrays.toString(newbs2));
|
||||
if (!main) Assertions.assertEquals(Arrays.toString(bs1), Arrays.toString(newbs2));
|
||||
System.out.println();
|
||||
|
||||
ProtobufConvert convert = ProtobufConvert.root().newConvert(objFieldFunc);
|
||||
System.out.println(Arrays.toString(convert.convertTo(msg1)));
|
||||
System.out.println(Arrays.toString(convert.convertTo(msg2)));
|
||||
if (!main) Assertions.assertEquals(Arrays.toString(convert.convertTo(msg1)), Arrays.toString(convert.convertTo(msg2)));
|
||||
System.out.println();
|
||||
}
|
||||
|
||||
public static interface BaseMessage {
|
||||
|
||||
@Inherited
|
||||
@Documented
|
||||
@Target({TYPE})
|
||||
@Retention(RUNTIME)
|
||||
public @interface MessageName {
|
||||
|
||||
String value();
|
||||
}
|
||||
|
||||
public static String getMessageName(Class<?> clazz) {
|
||||
MessageName mn = clazz.getAnnotation(MessageName.class);
|
||||
if (mn != null) return mn.value();
|
||||
char[] fieldChars = clazz.getSimpleName().toCharArray();
|
||||
fieldChars[0] = Character.toLowerCase(fieldChars[0]);
|
||||
return new String(fieldChars);
|
||||
}
|
||||
|
||||
public static Encodeable<Writer, BaseMessage> createConvertCoder(ProtobufFactory factory, Class<?> clazz) {
|
||||
Encodeable valEncoder = factory.createEncoder(clazz, true);
|
||||
ObjectEncoder encoder = new ProtobufObjectEncoder< BaseMessage>(clazz) {
|
||||
@Override
|
||||
protected void afterInitEnMember(ConvertFactory factory) {
|
||||
Function func = t -> t;
|
||||
Attribute attribute = Attribute.create(clazz, getMessageName(clazz), clazz, func, null);
|
||||
EnMember member = new EnMember(attribute, valEncoder, null, null);
|
||||
setIndex(member, 1);
|
||||
setPosition(member, 1);
|
||||
initForEachEnMember(factory, member);
|
||||
this.members = new EnMember[]{member};
|
||||
}
|
||||
};
|
||||
encoder.init(factory);
|
||||
return encoder;
|
||||
}
|
||||
|
||||
public static Decodeable<Reader, BaseMessage> createConvertDeCoder(ProtobufFactory factory, Class<?> clazz) {
|
||||
Decodeable valDecoder = factory.createDecoder(clazz, true);
|
||||
ObjectDecoder decoder = new ProtobufObjectDecoder< BaseMessage>(clazz) {
|
||||
@Override
|
||||
protected void afterInitDeMember(ConvertFactory factory) {
|
||||
this.creator = (Creator) objs -> new Object[1];
|
||||
Function func = t -> t;
|
||||
BiConsumer consumer = (t, v) -> ((Object[]) t)[0] = v;
|
||||
Attribute attribute = Attribute.create(clazz, getMessageName(clazz), clazz, func, consumer);
|
||||
DeMember member = new DeMember(attribute, valDecoder, null, null);
|
||||
setIndex(member, 1);
|
||||
setPosition(member, 1);
|
||||
initForEachDeMember(factory, member);
|
||||
this.members = new DeMember[]{member};
|
||||
}
|
||||
|
||||
@Override
|
||||
public BaseMessage convertFrom(ProtobufReader in) {
|
||||
Object result = (Object) super.convertFrom(in);
|
||||
return (BaseMessage) ((Object[]) result)[0];
|
||||
}
|
||||
};
|
||||
decoder.init(factory);
|
||||
return decoder;
|
||||
}
|
||||
}
|
||||
|
||||
@BaseMessage.MessageName("onPlayerLeaveMessage")
|
||||
public static class OnPlayerLeaveMessage2 implements BaseMessage {
|
||||
|
||||
@ConvertColumn(index = 1)
|
||||
public int userid;
|
||||
|
||||
@ConvertColumn(index = 2)
|
||||
public String retinfo;
|
||||
|
||||
public OnPlayerLeaveMessage2() {
|
||||
}
|
||||
|
||||
public OnPlayerLeaveMessage2(int userid, String retinfo) {
|
||||
this.userid = userid;
|
||||
this.retinfo = retinfo;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return JsonConvert.root().convertTo(this);
|
||||
}
|
||||
}
|
||||
|
||||
public static class OnPlayerLeaveMessage {
|
||||
|
||||
private OnPlayerLeaveContent onPlayerLeaveMessage;
|
||||
|
||||
public OnPlayerLeaveMessage() {
|
||||
}
|
||||
|
||||
public OnPlayerLeaveMessage(int userid) {
|
||||
this.onPlayerLeaveMessage = new OnPlayerLeaveContent(userid);
|
||||
}
|
||||
|
||||
public OnPlayerLeaveMessage(int userid, String retinfo) {
|
||||
this.onPlayerLeaveMessage = new OnPlayerLeaveContent(userid, retinfo);
|
||||
}
|
||||
|
||||
public OnPlayerLeaveContent getOnPlayerLeaveMessage() {
|
||||
return onPlayerLeaveMessage;
|
||||
}
|
||||
|
||||
public void setOnPlayerLeaveMessage(OnPlayerLeaveContent onPlayerLeaveMessage) {
|
||||
this.onPlayerLeaveMessage = onPlayerLeaveMessage;
|
||||
}
|
||||
|
||||
public static class OnPlayerLeaveContent {
|
||||
|
||||
@ConvertColumn(index = 1)
|
||||
public int userid;
|
||||
|
||||
@ConvertColumn(index = 2)
|
||||
public String retinfo;
|
||||
|
||||
public OnPlayerLeaveContent() {
|
||||
}
|
||||
|
||||
public OnPlayerLeaveContent(int userid) {
|
||||
this.userid = userid;
|
||||
}
|
||||
|
||||
public OnPlayerLeaveContent(int userid, String retinfo) {
|
||||
this.userid = userid;
|
||||
this.retinfo = retinfo;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return JsonConvert.root().convertTo(this);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return JsonConvert.root().convertTo(this);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
syntax = "proto3";
|
||||
|
||||
// 生成类的包名
|
||||
option java_package = "org.redkalex.test.protobuf";
|
||||
|
||||
message PSimpleBean {
|
||||
|
||||
message PSimpleEntry {
|
||||
sint32 id = 1;
|
||||
string name = 2;
|
||||
string email = 3;
|
||||
}
|
||||
|
||||
message PTwoEntry {
|
||||
sint32 status = 1;
|
||||
sint64 createtime = 2;
|
||||
}
|
||||
PSimpleEntry simple = 1;
|
||||
PTwoEntry two = 2;
|
||||
string strings = 3 ;
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,36 @@
|
||||
syntax = "proto3";
|
||||
|
||||
// 生成类的包名
|
||||
option java_package = "org.redkalex.test.protobuf";
|
||||
|
||||
message PTestBean {
|
||||
|
||||
message PTestEntry {
|
||||
repeated bool bools = 1;
|
||||
repeated bytes bytes = 2;
|
||||
repeated sint32 chars = 3;
|
||||
repeated sint32 shorts = 4;
|
||||
}
|
||||
|
||||
repeated bool bools = 1;
|
||||
repeated bytes bytes = 2;
|
||||
repeated sint32 chars = 3;
|
||||
repeated PTestEntry entrys = 4;
|
||||
repeated sint32 ints = 5;
|
||||
repeated float floats = 6;
|
||||
repeated sint64 longs = 7;
|
||||
repeated double doubles = 8;
|
||||
repeated string strings = 9;
|
||||
sint32 id = 10;
|
||||
string name = 11;
|
||||
string email = 12;
|
||||
Kind kind = 13;
|
||||
map<string,sint32> map = 14;
|
||||
string end = 15;
|
||||
|
||||
enum Kind {
|
||||
ONE =0;
|
||||
TWO =1;
|
||||
THREE =2;
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
105
src/test/java/org/redkale/test/convert/protobuf/SimpleBean.java
Normal file
105
src/test/java/org/redkale/test/convert/protobuf/SimpleBean.java
Normal file
@@ -0,0 +1,105 @@
|
||||
package org.redkale.test.convert.protobuf;
|
||||
|
||||
///*
|
||||
// * To change this license header, choose License Headers in Project Properties.
|
||||
// * To change this template file, choose Tools | Templates
|
||||
// * and open the template in the editor.
|
||||
// */
|
||||
//package org.redkalex.test.protobuf;
|
||||
//
|
||||
//import java.util.Arrays;
|
||||
//import org.redkale.convert.ConvertColumn;
|
||||
//import org.redkale.convert.json.JsonConvert;
|
||||
//import org.redkale.util.Utility;
|
||||
//import org.redkalex.convert.protobuf.ProtobufConvert;
|
||||
//
|
||||
///**
|
||||
// *
|
||||
// * @author zhangjx
|
||||
// */
|
||||
//public class SimpleBean {
|
||||
//
|
||||
// public static class PSimpleEntry {
|
||||
//
|
||||
// @ConvertColumn(index = 1)
|
||||
// public int id = 66;
|
||||
//
|
||||
// @ConvertColumn(index = 2)
|
||||
// public String name = "哈哈";
|
||||
//
|
||||
// @ConvertColumn(index = 3)
|
||||
// public String email = "redkale@redkale.org";
|
||||
// }
|
||||
//
|
||||
// public static class PTwoEntry {
|
||||
//
|
||||
// @ConvertColumn(index = 1)
|
||||
// public int status = 2;
|
||||
//
|
||||
// @ConvertColumn(index = 2)
|
||||
// public long createtime = System.currentTimeMillis();
|
||||
//
|
||||
// }
|
||||
//
|
||||
// @ConvertColumn(index = 1)
|
||||
// public PSimpleEntry simple;
|
||||
//
|
||||
// @ConvertColumn(index = 2)
|
||||
// public PTwoEntry two;
|
||||
//
|
||||
// @ConvertColumn(index = 3)
|
||||
// public String strings = "abcd";
|
||||
//
|
||||
// @Override
|
||||
// public String toString() {
|
||||
// return JsonConvert.root().convertTo(this);
|
||||
// }
|
||||
//
|
||||
// public static void main(String[] args) throws Throwable {
|
||||
// //System.out.println(ProtobufConvert.root().getProtoDescriptor(SimpleBean.class));
|
||||
// SimpleBean bean = new SimpleBean();
|
||||
// bean.simple = new PSimpleEntry();
|
||||
// bean.two = new PTwoEntry();
|
||||
// bean.strings = "abcde";
|
||||
//
|
||||
// //-------------------------------
|
||||
// byte[] jsonbs = JsonConvert.root().convertToBytes(bean);
|
||||
// byte[] bs = ProtobufConvert.root().convertTo(bean);
|
||||
// Utility.println("predkale ", bs);
|
||||
// PSimpleBeanOuterClass.PSimpleBean.Builder builder = PSimpleBeanOuterClass.PSimpleBean.newBuilder();
|
||||
//
|
||||
// PSimpleBeanOuterClass.PSimpleBean bean2 = createPSimpleBean(bean, builder);
|
||||
// byte[] bs2 = bean2.toByteArray();
|
||||
// Utility.println("protobuf ", bs2);
|
||||
// Thread.sleep(10);
|
||||
// if (!Arrays.equals(bs, bs2)) throw new RuntimeException("两者序列化出来的byte[]不一致");
|
||||
//
|
||||
// System.out.println(bean);
|
||||
// System.out.println(ProtobufConvert.root().convertFrom(SimpleBean.class, bs).toString());
|
||||
// System.out.println(JsonConvert.root().convertFrom(SimpleBean.class, jsonbs).toString());
|
||||
//
|
||||
// }
|
||||
//
|
||||
// private static PSimpleBeanOuterClass.PSimpleBean createPSimpleBean(SimpleBean bean, PSimpleBeanOuterClass.PSimpleBean.Builder builder) {
|
||||
// if (builder == null) {
|
||||
// builder = PSimpleBeanOuterClass.PSimpleBean.newBuilder();
|
||||
// } else {
|
||||
// builder.clear();
|
||||
// }
|
||||
// PSimpleBeanOuterClass.PSimpleBean.PSimpleEntry.Builder sentry = PSimpleBeanOuterClass.PSimpleBean.PSimpleEntry.newBuilder();
|
||||
// sentry.setId(bean.simple.id);
|
||||
// sentry.setName(bean.simple.name);
|
||||
// sentry.setEmail(bean.simple.email);
|
||||
// builder.setSimple(sentry.build());
|
||||
//
|
||||
// PSimpleBeanOuterClass.PSimpleBean.PTwoEntry.Builder tentry = PSimpleBeanOuterClass.PSimpleBean.PTwoEntry.newBuilder();
|
||||
// tentry.setStatus(bean.two.status);
|
||||
// tentry.setCreatetime(bean.two.createtime);
|
||||
// builder.setTwo(tentry.build());
|
||||
//
|
||||
// builder.setStrings(bean.strings);
|
||||
//
|
||||
// PSimpleBeanOuterClass.PSimpleBean bean2 = builder.build();
|
||||
// return bean2;
|
||||
// }
|
||||
//}
|
||||
241
src/test/java/org/redkale/test/convert/protobuf/TestBean.java
Normal file
241
src/test/java/org/redkale/test/convert/protobuf/TestBean.java
Normal file
@@ -0,0 +1,241 @@
|
||||
package org.redkale.test.convert.protobuf;
|
||||
|
||||
///*
|
||||
// * To change this license header, choose License Headers in Project Properties.
|
||||
// * To change this template file, choose Tools | Templates
|
||||
// * and open the template in the editor.
|
||||
// */
|
||||
//package org.redkalex.test.protobuf;
|
||||
//
|
||||
//import org.redkalex.convert.protobuf.ProtobufReader;
|
||||
//import org.redkalex.convert.protobuf.ProtobufConvert;
|
||||
//import com.google.protobuf.*;
|
||||
//import java.util.*;
|
||||
//import org.redkale.convert.ConvertColumn;
|
||||
//import org.redkale.convert.json.JsonConvert;
|
||||
//import org.redkale.service.RetResult;
|
||||
//import org.redkale.util.*;
|
||||
//
|
||||
///**
|
||||
// *
|
||||
// * @author zhangjx
|
||||
// */
|
||||
//public class TestBean {
|
||||
//
|
||||
// public static class PTestEntry {
|
||||
//
|
||||
// @ConvertColumn(index = 1)
|
||||
// public boolean[] bools = new boolean[]{true, false, true};
|
||||
//
|
||||
// @ConvertColumn(index = 2)
|
||||
// public byte[] bytes = new byte[]{1, 2, 3, 4};
|
||||
//
|
||||
// @ConvertColumn(index = 3)
|
||||
// public char[] chars = new char[]{'A', 'B', 'C'};
|
||||
//
|
||||
// @ConvertColumn(index = 4)
|
||||
// public short[] shorts = new short[]{10, 20, 30};
|
||||
//
|
||||
// @Override
|
||||
// public String toString() {
|
||||
// return JsonConvert.root().convertTo(this);
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// public static enum Kind {
|
||||
// ONE,
|
||||
// TWO,
|
||||
// THREE
|
||||
// }
|
||||
//
|
||||
// @ConvertColumn(index = 1)
|
||||
// public boolean[] bools;
|
||||
//
|
||||
// @ConvertColumn(index = 2)
|
||||
// public byte[] bytes;
|
||||
//
|
||||
// @ConvertColumn(index = 3)
|
||||
// public char[] chars;
|
||||
//
|
||||
// @ConvertColumn(index = 4)
|
||||
// public PTestEntry[] entrys;
|
||||
//
|
||||
// @ConvertColumn(index = 5)
|
||||
// public int[] ints;
|
||||
//
|
||||
// @ConvertColumn(index = 6)
|
||||
// public float[] floats;
|
||||
//
|
||||
// @ConvertColumn(index = 7)
|
||||
// public long[] longs;
|
||||
//
|
||||
// @ConvertColumn(index = 8)
|
||||
// public double[] doubles; //8
|
||||
//
|
||||
// @ConvertColumn(index = 9)
|
||||
// public String[] strings; //9
|
||||
//
|
||||
// @ConvertColumn(index = 10)
|
||||
// public int id = 0x7788; //10
|
||||
//
|
||||
// @ConvertColumn(index = 11)
|
||||
// public String name; //11
|
||||
//
|
||||
// @ConvertColumn(index = 12)
|
||||
// public String email; //12
|
||||
//
|
||||
// @ConvertColumn(index = 13)
|
||||
// public Kind kind; //13
|
||||
//
|
||||
// @ConvertColumn(index = 14)
|
||||
// public Map<String, Integer> map; //14
|
||||
//
|
||||
// @ConvertColumn(index = 15)
|
||||
// public String end; //15
|
||||
//
|
||||
// @Override
|
||||
// public String toString() {
|
||||
// return JsonConvert.root().convertTo(this);
|
||||
// }
|
||||
//
|
||||
// public static void main3(String[] args) throws Throwable {
|
||||
// byte[] src = new byte[]{(byte) 0x82, (byte) 0x01, (byte) 0x84, (byte) 0x01, (byte) 0x86, (byte) 0x01};
|
||||
// src = new byte[]{(byte) 0x01, (byte) 0x00, (byte) 0x01, (byte) 0x01};
|
||||
// CodedInputStream input = CodedInputStream.newInstance(src);
|
||||
// System.out.println("结果1: " + input.readSInt32());
|
||||
// System.out.println("结果1: " + input.readSInt32());
|
||||
// System.out.println("结果1: " + input.readSInt32());
|
||||
// ProtobufReader reader = new ProtobufReader(src);
|
||||
// System.out.println("结果2: " + reader.readInt());
|
||||
// System.out.println("结果2: " + reader.readInt());
|
||||
// System.out.println("结果2: " + reader.readInt());
|
||||
// }
|
||||
//
|
||||
// private static java.lang.reflect.Type retstring = new TypeToken<RetResult<Map<String, String>>>() {
|
||||
// }.getType();
|
||||
//
|
||||
// public static void main2(String[] args) throws Throwable {
|
||||
// System.out.println(ProtobufConvert.root().getProtoDescriptor(retstring));
|
||||
// }
|
||||
//
|
||||
// public static void main(String[] args) throws Throwable {
|
||||
// System.setProperty("convert.protobuf.enumtostring", "false"); //禁用枚举按字符串类型出来
|
||||
// //System.out.println(ProtobufConvert.root().getProtoDescriptor(TestBean.class));
|
||||
// //System.out.println(Integer.toHexString(14<<3|2));
|
||||
// TestBean bean = new TestBean();
|
||||
//
|
||||
// bean.bools = new boolean[]{true, false, true};
|
||||
// bean.bytes = new byte[]{1, 2, 3, 4};
|
||||
// bean.chars = new char[]{'A', 'B', 'C'};
|
||||
// bean.ints = new int[]{100, 200, 300};
|
||||
// bean.floats = new float[]{10.12f, 20.34f};
|
||||
// bean.longs = new long[]{111, 222, 333};
|
||||
// bean.doubles = new double[]{65.65, 78.78};
|
||||
// bean.name = "redkale";
|
||||
// bean.email = "redkale@qq.org";
|
||||
// bean.kind = Kind.TWO;
|
||||
// bean.strings = new String[]{"str1", "str2", "str3"};
|
||||
// bean.entrys = new PTestEntry[]{new PTestEntry(), null, new PTestEntry()};
|
||||
// bean.map = Utility.ofMap("aa", 0x55, "bb", 0x66);
|
||||
// bean.end = "over";
|
||||
//
|
||||
// //-------------------------------
|
||||
// byte[] jsonbs = JsonConvert.root().convertToBytes(bean);
|
||||
// byte[] bs = ProtobufConvert.root().convertTo(bean);
|
||||
// Utility.println("pconvert ", bs);
|
||||
// PTestBeanOuterClass.PTestBean.Builder builder = PTestBeanOuterClass.PTestBean.newBuilder();
|
||||
//
|
||||
// PTestBeanOuterClass.PTestBean bean2 = createPTestBean(bean, builder);
|
||||
// byte[] bs2 = bean2.toByteArray();
|
||||
// Utility.println("protobuf ", bs2);
|
||||
// Thread.sleep(10);
|
||||
// if (!Arrays.equals(bs, bs2)) throw new RuntimeException("两者序列化出来的byte[]不一致");
|
||||
//
|
||||
// System.out.println(bean);
|
||||
// String frombean = ProtobufConvert.root().convertFrom(TestBean.class, bs).toString();
|
||||
// System.out.println(frombean);
|
||||
// if (!bean.toString().equals(frombean)) throw new RuntimeException("ProtobufConvert反解析后的结果不正确");
|
||||
// System.out.println(JsonConvert.root().convertFrom(TestBean.class, jsonbs).toString());
|
||||
//
|
||||
// int count = 100000;
|
||||
// long s, e;
|
||||
// s = System.currentTimeMillis();
|
||||
// for (int z = 0; z < count; z++) {
|
||||
// ProtobufConvert.root().convertTo(bean);
|
||||
// }
|
||||
// e = System.currentTimeMillis() - s;
|
||||
// System.out.println("redkale-protobuf耗时-------" + e);
|
||||
//
|
||||
// s = System.currentTimeMillis();
|
||||
// for (int z = 0; z < count; z++) {
|
||||
// JsonConvert.root().convertToBytes(bean);
|
||||
// }
|
||||
// e = System.currentTimeMillis() - s;
|
||||
// System.out.println("redkale-json文本耗时-------" + e);
|
||||
//
|
||||
// s = System.currentTimeMillis();
|
||||
// for (int z = 0; z < count; z++) {
|
||||
// createPTestBean(bean, builder).toByteArray();
|
||||
// }
|
||||
// e = System.currentTimeMillis() - s;
|
||||
// System.out.println("原生编译protobuf耗时-------" + e);
|
||||
// }
|
||||
//
|
||||
// private static PTestBeanOuterClass.PTestBean createPTestBean(TestBean bean, PTestBeanOuterClass.PTestBean.Builder builder) {
|
||||
// if (builder == null) {
|
||||
// builder = PTestBeanOuterClass.PTestBean.newBuilder();
|
||||
// } else {
|
||||
// builder.clear();
|
||||
// }
|
||||
// for (int i = 0; bean.bools != null && i < bean.bools.length; i++) {
|
||||
// builder.addBools(bean.bools[i]);
|
||||
// }
|
||||
// if (bean.bytes != null) builder.addBytes(ByteString.copyFrom(bean.bytes));
|
||||
// for (int i = 0; bean.chars != null && i < bean.chars.length; i++) {
|
||||
// builder.addChars(bean.chars[i]);
|
||||
// }
|
||||
// for (int i = 0; bean.entrys != null && i < bean.entrys.length; i++) {
|
||||
// PTestBeanOuterClass.PTestBean.PTestEntry.Builder entry = PTestBeanOuterClass.PTestBean.PTestEntry.newBuilder();
|
||||
// if (bean.entrys[i] == null) {
|
||||
// builder.addEntrys(entry.build());
|
||||
// continue;
|
||||
// }
|
||||
// for (int j = 0; bean.entrys[i].bools != null && j < bean.entrys[i].bools.length; j++) {
|
||||
// entry.addBools(bean.entrys[i].bools[j]);
|
||||
// }
|
||||
// if (bean.entrys[i].bytes != null) entry.addBytes(ByteString.copyFrom(bean.entrys[i].bytes));
|
||||
// for (int j = 0; bean.entrys[i].chars != null && j < bean.entrys[i].chars.length; j++) {
|
||||
// entry.addChars(bean.entrys[i].chars[j]);
|
||||
// }
|
||||
// for (int j = 0; bean.entrys[i].shorts != null && j < bean.entrys[i].shorts.length; j++) {
|
||||
// entry.addShorts(bean.entrys[i].shorts[j]);
|
||||
// }
|
||||
// builder.addEntrys(entry.build());
|
||||
// }
|
||||
// for (int i = 0; bean.ints != null && i < bean.ints.length; i++) {
|
||||
// builder.addInts(bean.ints[i]);
|
||||
// }
|
||||
// for (int i = 0; bean.floats != null && i < bean.floats.length; i++) {
|
||||
// builder.addFloats(bean.floats[i]);
|
||||
// }
|
||||
// for (int i = 0; bean.longs != null && i < bean.longs.length; i++) {
|
||||
// builder.addLongs(bean.longs[i]);
|
||||
// }
|
||||
// for (int i = 0; bean.doubles != null && i < bean.doubles.length; i++) {
|
||||
// builder.addDoubles(bean.doubles[i]);
|
||||
// }
|
||||
// for (int i = 0; bean.strings != null && i < bean.strings.length; i++) {
|
||||
// builder.addStrings(bean.strings[i]);
|
||||
// }
|
||||
// builder.setId(bean.id);
|
||||
// if (bean.name != null) builder.setName(bean.name);
|
||||
// if (bean.email != null) builder.setEmail(bean.email);
|
||||
// if (bean.kind != null) builder.setKind(PTestBeanOuterClass.PTestBean.Kind.TWO);
|
||||
// if (bean.map != null) builder.putAllMap(bean.map);
|
||||
// if (bean.end != null) builder.setEnd(bean.end);
|
||||
// PTestBeanOuterClass.PTestBean bean2 = builder.build();
|
||||
// return bean2;
|
||||
// }
|
||||
//}
|
||||
//
|
||||
////protoc --java_out=D:\Java-Projects\RedkalePluginsProject\test\ --proto_path=D:\Java-Projects\RedkalePluginsProject\test\org\redkalex\test\protobuf\ PTestBean.proto
|
||||
Reference in New Issue
Block a user