diff --git a/src/main/java/org/redkale/convert/json/JsonDynEncoder.java b/src/main/java/org/redkale/convert/json/JsonDynEncoder.java index 925eb98f3..e96abd071 100644 --- a/src/main/java/org/redkale/convert/json/JsonDynEncoder.java +++ b/src/main/java/org/redkale/convert/json/JsonDynEncoder.java @@ -7,11 +7,6 @@ package org.redkale.convert.json; import java.lang.reflect.*; import java.lang.reflect.Type; -import java.math.BigDecimal; -import java.math.BigInteger; -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.LocalTime; import java.util.*; import org.redkale.asm.*; import static org.redkale.asm.ClassWriter.COMPUTE_FRAMES; @@ -82,24 +77,6 @@ public abstract class JsonDynEncoder implements Encodeable { if (type == Double.class) { return true; } - if (type == BigInteger.class) { - return true; - } - if (type == BigDecimal.class) { - return true; - } - if (type == LocalDate.class) { - return true; - } - if (type == LocalTime.class) { - return true; - } - if (type == LocalDateTime.class) { - return true; - } - if (type == java.util.Date.class) { - return true; - } if (type == boolean[].class) { return true; } @@ -151,7 +128,9 @@ public abstract class JsonDynEncoder implements Encodeable { if (type == String[].class) { return true; } - + if (factory.rootFactory().findEncoder(type) != null) { + return true; + } if (declaringClass == clazz) { return false; } @@ -168,12 +147,7 @@ public abstract class JsonDynEncoder implements Encodeable { || t == Long.class || t == Double.class || t == String.class - || t == BigInteger.class - || t == BigDecimal.class - || t == LocalDate.class - || t == LocalTime.class - || t == LocalDateTime.class - || t == java.util.Date.class + || factory.rootFactory().findEncoder(t) != null || ((t instanceof Class) && ((Class) t).isEnum())) { return true; } diff --git a/src/main/java/org/redkale/convert/pb/ProtobufCollectionEncoder.java b/src/main/java/org/redkale/convert/pb/ProtobufCollectionEncoder.java index e1933b046..471786146 100644 --- a/src/main/java/org/redkale/convert/pb/ProtobufCollectionEncoder.java +++ b/src/main/java/org/redkale/convert/pb/ProtobufCollectionEncoder.java @@ -35,7 +35,7 @@ public class ProtobufCollectionEncoder extends CollectionEncoder Writer输出的子类型 * @param Enum的子类 */ -public class ProtobufEnumSimpledCoder +public class ProtobufEnumSimpledCoder extends SimpledCoder { private final Map values = new HashMap<>(); @@ -48,7 +48,7 @@ public class ProtobufEnumSimpledCoder createPool(int max) { - return ObjectPool.createSafePool(max, (Object... params) -> new ProtobufReader(), null, t -> t.recycle()); + public ProtobufReader() { + // do nothing } - public ProtobufReader() {} - public ProtobufReader(byte[] bytes) { setBytes(bytes, 0, bytes.length); } diff --git a/src/main/java/org/redkale/convert/pb/ProtobufWriter.java b/src/main/java/org/redkale/convert/pb/ProtobufWriter.java index 7eed1646b..5469cdf44 100644 --- a/src/main/java/org/redkale/convert/pb/ProtobufWriter.java +++ b/src/main/java/org/redkale/convert/pb/ProtobufWriter.java @@ -31,10 +31,6 @@ public class ProtobufWriter extends Writer implements ByteTuple { protected ProtobufWriter parent; - public static ObjectPool createPool(int max) { - return ObjectPool.createSafePool(max, (Object... params) -> new ProtobufWriter(), null, t -> t.recycle()); - } - protected ProtobufWriter(ProtobufWriter parent, int features) { this(); this.parent = parent; @@ -484,8 +480,7 @@ public class ProtobufWriter extends Writer implements ByteTuple { this.writeFieldName(member); ProtobufWriter tmp = new ProtobufWriter().configFieldFunc(this); collectionEncoder.convertTo(tmp, member, (Collection) value); - int length = tmp.count(); - this.writeUInt32(length); + this.writeLength(tmp.count()); this.writeTo(tmp.toArray()); } } else { @@ -497,8 +492,7 @@ public class ProtobufWriter extends Writer implements ByteTuple { this.writeFieldName(member); ProtobufWriter tmp = new ProtobufWriter().configFieldFunc(this); streamEncoder.convertTo(tmp, member, (Stream) value); - int length = tmp.count(); - this.writeUInt32(length); + this.writeLength(tmp.count()); this.writeTo(tmp.toArray()); } else { streamEncoder.convertTo(this, member, (Stream) value); @@ -614,6 +608,10 @@ public class ProtobufWriter extends Writer implements ByteTuple { } protected void writeUInt32(int value) { + if (value >= 0 && value < 128) { + writeTo((byte) value); + return; + } while (true) { if ((value & ~0x7F) == 0) { writeTo((byte) value); diff --git a/src/test/java/org/redkale/test/convert/pb/PBCustMessageTest.java b/src/test/java/org/redkale/test/convert/pb/PBCustMessageTest.java index e0cf02246..014c149ec 100644 --- a/src/test/java/org/redkale/test/convert/pb/PBCustMessageTest.java +++ b/src/test/java/org/redkale/test/convert/pb/PBCustMessageTest.java @@ -20,11 +20,8 @@ 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(); } @@ -40,20 +37,19 @@ public class PBCustMessageTest { 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)); + 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)); + 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))); + Assertions.assertEquals(Arrays.toString(convert.convertTo(msg1)), Arrays.toString(convert.convertTo(msg2))); System.out.println(); } diff --git a/src/test/java/org/redkale/test/convert/pb/User.java b/src/test/java/org/redkale/test/convert/pb/User.java index 9bf169e60..fde5e2526 100644 --- a/src/test/java/org/redkale/test/convert/pb/User.java +++ b/src/test/java/org/redkale/test/convert/pb/User.java @@ -20,7 +20,7 @@ public class User { private String name; @ConvertColumn(index = 3) - private String trueName; + private String nickName; @ConvertColumn(index = 4) private Integer age; @@ -34,10 +34,10 @@ public class User { public static User create() { User user = new User(); user.setId(1L); - user.setName("赵侠客"); // - user.setAge(29); + user.setName("Hello"); + user.setAge(18); user.setSex("男"); - user.setTrueName("公众号"); + user.setNickName("测试号"); user.setCreateTime(new Date(1451577600000L)); return user; } @@ -58,12 +58,12 @@ public class User { this.name = name; } - public String getTrueName() { - return trueName; + public String getNickName() { + return nickName; } - public void setTrueName(String trueName) { - this.trueName = trueName; + public void setNickName(String nickName) { + this.nickName = nickName; } public Integer getAge() { diff --git a/src/test/java/org/redkale/test/convert/pb/UserTest.java b/src/test/java/org/redkale/test/convert/pb/UserTest.java index f7650729f..6ba117761 100644 --- a/src/test/java/org/redkale/test/convert/pb/UserTest.java +++ b/src/test/java/org/redkale/test/convert/pb/UserTest.java @@ -4,6 +4,7 @@ */ package org.redkale.test.convert.pb; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.redkale.convert.pb.ProtobufConvert; @@ -22,6 +23,10 @@ public class UserTest { public void run() throws Exception { User user = User.create(); ProtobufConvert convert = ProtobufConvert.root(); - convert.convertTo(user); + byte[] bytes = convert.convertTo(user); + User user2 = convert.convertFrom(User.class, bytes); + System.out.println(user); + System.out.println(user2); + Assertions.assertEquals(user.toString(), user2.toString()); } }