diff --git a/src/main/java/org/redkale/convert/ArrayDecoder.java b/src/main/java/org/redkale/convert/ArrayDecoder.java index 851679c98..1a5c47a69 100644 --- a/src/main/java/org/redkale/convert/ArrayDecoder.java +++ b/src/main/java/org/redkale/convert/ArrayDecoder.java @@ -23,7 +23,7 @@ import org.redkale.util.Creator; * @param 反解析的数组元素类型 */ @SuppressWarnings("unchecked") -public class ArrayDecoder implements Decodeable { +public class ArrayDecoder implements TagDecodeable { protected final Type type; diff --git a/src/main/java/org/redkale/convert/CollectionDecoder.java b/src/main/java/org/redkale/convert/CollectionDecoder.java index 2a1c32f53..ba673db74 100644 --- a/src/main/java/org/redkale/convert/CollectionDecoder.java +++ b/src/main/java/org/redkale/convert/CollectionDecoder.java @@ -21,7 +21,7 @@ import org.redkale.util.Creator; * @param 反解析的集合元素类型 */ @SuppressWarnings("unchecked") -public class CollectionDecoder implements Decodeable> { +public class CollectionDecoder implements TagDecodeable> { protected final Type type; diff --git a/src/main/java/org/redkale/convert/MapDecoder.java b/src/main/java/org/redkale/convert/MapDecoder.java index 8691f5689..27b7b45e8 100644 --- a/src/main/java/org/redkale/convert/MapDecoder.java +++ b/src/main/java/org/redkale/convert/MapDecoder.java @@ -21,7 +21,7 @@ import org.redkale.util.Creator; * @param Map value的数据类型 */ @SuppressWarnings("unchecked") -public class MapDecoder implements Decodeable> { +public class MapDecoder implements TagDecodeable> { protected final Type type; diff --git a/src/main/java/org/redkale/convert/StreamDecoder.java b/src/main/java/org/redkale/convert/StreamDecoder.java index 338aef7d5..0e867b1db 100644 --- a/src/main/java/org/redkale/convert/StreamDecoder.java +++ b/src/main/java/org/redkale/convert/StreamDecoder.java @@ -21,7 +21,7 @@ import java.util.stream.Stream; * @param 反解析的集合元素类型 */ @SuppressWarnings("unchecked") -public class StreamDecoder implements Decodeable> { +public class StreamDecoder implements TagDecodeable> { protected final Type type; diff --git a/src/main/java/org/redkale/convert/TagDecodeable.java b/src/main/java/org/redkale/convert/TagDecodeable.java new file mode 100644 index 000000000..44a738094 --- /dev/null +++ b/src/main/java/org/redkale/convert/TagDecodeable.java @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2016-2116 Redkale + * All rights reserved. + */ +package org.redkale.convert; + +/** + * 带tag的反序列化操作类 + * + *

详情见: https://redkale.org + * + * @author zhangjx + * @param Reader输入的子类 + * @param 反解析的数据类型 + */ +public interface TagDecodeable extends Decodeable { + /** + * 反序列化操作 + * + * @param in R + * @param member DeMember + * @return T + */ + public T convertFrom(final R in, DeMember member); +} diff --git a/src/main/java/org/redkale/convert/pb/ProtobufArrayDecoder.java b/src/main/java/org/redkale/convert/pb/ProtobufArrayDecoder.java index e26fdfc03..0faafa4af 100644 --- a/src/main/java/org/redkale/convert/pb/ProtobufArrayDecoder.java +++ b/src/main/java/org/redkale/convert/pb/ProtobufArrayDecoder.java @@ -6,7 +6,6 @@ package org.redkale.convert.pb; import java.lang.reflect.Type; -import java.util.concurrent.atomic.*; import org.redkale.convert.*; /** @@ -26,15 +25,7 @@ public class ProtobufArrayDecoder extends ArrayDecoder { this.enumtostring = factory.enumtostring; Type comtype = this.getComponentType(); this.string = String.class == comtype; - this.simple = Boolean.class == comtype - || Short.class == comtype - || Character.class == comtype - || Integer.class == comtype - || Float.class == comtype - || Long.class == comtype - || Double.class == comtype - || AtomicInteger.class == comtype - || AtomicLong.class == comtype; + this.simple = ProtobufFactory.isNoLenBytesType(comtype); } @Override diff --git a/src/main/java/org/redkale/convert/pb/ProtobufArrayEncoder.java b/src/main/java/org/redkale/convert/pb/ProtobufArrayEncoder.java index edf37bb6a..486974db3 100644 --- a/src/main/java/org/redkale/convert/pb/ProtobufArrayEncoder.java +++ b/src/main/java/org/redkale/convert/pb/ProtobufArrayEncoder.java @@ -6,7 +6,6 @@ package org.redkale.convert.pb; import java.lang.reflect.Type; -import java.util.concurrent.atomic.*; import org.redkale.convert.*; /** @@ -19,16 +18,7 @@ public class ProtobufArrayEncoder extends ArrayEncoder { public ProtobufArrayEncoder(ProtobufFactory factory, Type type) { super(factory, type); - Type comtype = this.getComponentType(); - this.simple = Boolean.class == comtype - || Short.class == comtype - || Character.class == comtype - || Integer.class == comtype - || Float.class == comtype - || Long.class == comtype - || Double.class == comtype - || AtomicInteger.class == comtype - || AtomicLong.class == comtype; + this.simple = ProtobufFactory.isNoLenBytesType(getComponentType()); } @Override diff --git a/src/main/java/org/redkale/convert/pb/ProtobufCollectionDecoder.java b/src/main/java/org/redkale/convert/pb/ProtobufCollectionDecoder.java index 2d494c567..be8467c54 100644 --- a/src/main/java/org/redkale/convert/pb/ProtobufCollectionDecoder.java +++ b/src/main/java/org/redkale/convert/pb/ProtobufCollectionDecoder.java @@ -6,7 +6,6 @@ package org.redkale.convert.pb; import java.lang.reflect.Type; -import java.util.concurrent.atomic.*; import org.redkale.convert.*; /** @@ -26,15 +25,7 @@ public class ProtobufCollectionDecoder extends CollectionDecoder extends CollectionEncoder extends ObjectDecoder { @Override protected ProtobufReader objectReader(ProtobufReader in) { - if (in.position() > in.initoffset) return new ProtobufReader(in.readByteArray()); + if (in.position() > in.initoffset) { + return new ProtobufReader(in.readByteArray()); + } return in; } @@ -45,14 +47,8 @@ public class ProtobufObjectDecoder extends ObjectDecoder { @Override protected Object readDeMemberValue(ProtobufReader in, DeMember member, boolean first) { Decodeable decoder = member.getDecoder(); - if (decoder instanceof ProtobufArrayDecoder) { - return ((ProtobufArrayDecoder) decoder).convertFrom(in, member); - } else if (decoder instanceof ProtobufCollectionDecoder) { - return ((ProtobufCollectionDecoder) decoder).convertFrom(in, member); - } else if (decoder instanceof ProtobufStreamDecoder) { - return ((ProtobufStreamDecoder) decoder).convertFrom(in, member); - } else if (decoder instanceof ProtobufMapDecoder) { - return ((ProtobufMapDecoder) decoder).convertFrom(in, member); + if (decoder instanceof TagDecodeable) { + return ((TagDecodeable) decoder).convertFrom(in, member); } else { return member.read(in); } @@ -61,14 +57,8 @@ public class ProtobufObjectDecoder extends ObjectDecoder { @Override protected void readDeMemberValue(ProtobufReader in, DeMember member, T result, boolean first) { Decodeable decoder = member.getDecoder(); - if (decoder instanceof ProtobufArrayDecoder) { - member.getAttribute().set(result, ((ProtobufArrayDecoder) decoder).convertFrom(in, member)); - } else if (decoder instanceof ProtobufCollectionDecoder) { - member.getAttribute().set(result, ((ProtobufCollectionDecoder) decoder).convertFrom(in, member)); - } else if (decoder instanceof ProtobufStreamDecoder) { - member.getAttribute().set(result, ((ProtobufStreamDecoder) decoder).convertFrom(in, member)); - } else if (decoder instanceof ProtobufMapDecoder) { - member.getAttribute().set(result, ((ProtobufMapDecoder) decoder).convertFrom(in, member)); + if (decoder instanceof TagDecodeable) { + member.getAttribute().set(result, ((TagDecodeable) decoder).convertFrom(in, member)); } else { member.read(in, result); } diff --git a/src/main/java/org/redkale/convert/pb/ProtobufReader.java b/src/main/java/org/redkale/convert/pb/ProtobufReader.java index 81dab186f..854999c84 100644 --- a/src/main/java/org/redkale/convert/pb/ProtobufReader.java +++ b/src/main/java/org/redkale/convert/pb/ProtobufReader.java @@ -8,7 +8,6 @@ package org.redkale.convert.pb; import java.lang.reflect.Type; import java.nio.charset.StandardCharsets; import java.util.*; -import java.util.concurrent.atomic.*; import org.redkale.convert.*; /** @author zhangjx */ @@ -20,7 +19,7 @@ public class ProtobufReader extends Reader { private byte[] content; - protected int cachetag = Integer.MIN_VALUE; + protected int cacheTag = Integer.MIN_VALUE; protected boolean enumtostring; @@ -106,6 +105,8 @@ public class ProtobufReader extends Reader { case 5: readRawLittleEndian32(); break; + default: + break; } } @@ -146,18 +147,7 @@ public class ProtobufReader extends Reader { if (!(type instanceof Class)) { return Reader.SIGN_NOLENBUTBYTES; } - Class clazz = (Class) type; - if (clazz.isPrimitive() - || clazz == Boolean.class - || clazz == Byte.class - || clazz == Short.class - || clazz == Character.class - || clazz == Integer.class - || clazz == Float.class - || clazz == Long.class - || clazz == Double.class - || clazz == AtomicInteger.class - || clazz == AtomicLong.class) { + if (ProtobufFactory.isNoLenBytesType(type)) { return Reader.SIGN_NOLENBUTBYTES; } return Reader.SIGN_NOLENGTH; @@ -276,16 +266,16 @@ public class ProtobufReader extends Reader { } protected final int readTag() { - if (cachetag != Integer.MIN_VALUE) { - int tag = cachetag; - cachetag = Integer.MIN_VALUE; + if (cacheTag != Integer.MIN_VALUE) { + int tag = cacheTag; + cacheTag = Integer.MIN_VALUE; return tag; } return readRawVarint32(); } protected final void backTag(int tag) { - this.cachetag = tag; + this.cacheTag = tag; } protected byte currentByte() { diff --git a/src/main/java/org/redkale/convert/pb/ProtobufStreamDecoder.java b/src/main/java/org/redkale/convert/pb/ProtobufStreamDecoder.java index d27ccfd00..01757f888 100644 --- a/src/main/java/org/redkale/convert/pb/ProtobufStreamDecoder.java +++ b/src/main/java/org/redkale/convert/pb/ProtobufStreamDecoder.java @@ -6,7 +6,6 @@ package org.redkale.convert.pb; import java.lang.reflect.Type; -import java.util.concurrent.atomic.*; import org.redkale.convert.*; /** @@ -26,15 +25,7 @@ public class ProtobufStreamDecoder extends StreamDecoder { this.enumtostring = ((ProtobufFactory) factory).enumtostring; Type comtype = this.getComponentType(); this.string = String.class == comtype; - this.simple = Boolean.class == comtype - || Short.class == comtype - || Character.class == comtype - || Integer.class == comtype - || Float.class == comtype - || Long.class == comtype - || Double.class == comtype - || AtomicInteger.class == comtype - || AtomicLong.class == comtype; + this.simple = ProtobufFactory.isNoLenBytesType(comtype); } @Override diff --git a/src/main/java/org/redkale/convert/pb/ProtobufStreamEncoder.java b/src/main/java/org/redkale/convert/pb/ProtobufStreamEncoder.java index 9326ea02a..851c3c54e 100644 --- a/src/main/java/org/redkale/convert/pb/ProtobufStreamEncoder.java +++ b/src/main/java/org/redkale/convert/pb/ProtobufStreamEncoder.java @@ -6,7 +6,6 @@ package org.redkale.convert.pb; import java.lang.reflect.Type; -import java.util.concurrent.atomic.*; import org.redkale.convert.*; /** @@ -19,16 +18,7 @@ public class ProtobufStreamEncoder extends StreamEncoder { public ProtobufStreamEncoder(ConvertFactory factory, Type type) { super(factory, type); - Type comtype = this.getComponentType(); - this.simple = Boolean.class == comtype - || Short.class == comtype - || Character.class == comtype - || Integer.class == comtype - || Float.class == comtype - || Long.class == comtype - || Double.class == comtype - || AtomicInteger.class == comtype - || AtomicLong.class == comtype; + this.simple = ProtobufFactory.isNoLenBytesType(getComponentType()); } @Override