From de5114a480b9a1689b2adbb8058fdad97ec2444e Mon Sep 17 00:00:00 2001 From: redkale Date: Fri, 27 Sep 2024 10:27:31 +0800 Subject: [PATCH] convert --- .../org/redkale/convert/ArrayDecoder.java | 36 ++++---- .../org/redkale/convert/ArrayEncoder.java | 85 ++++++++++--------- .../redkale/convert/CollectionDecoder.java | 36 ++++---- .../redkale/convert/CollectionEncoder.java | 53 ++++++------ .../java/org/redkale/convert/MapDecoder.java | 17 ++-- .../java/org/redkale/convert/MapEncoder.java | 54 ++++++------ .../org/redkale/convert/ObjectDecoder.java | 39 +++++---- .../org/redkale/convert/ObjectEncoder.java | 59 +++++++------ .../org/redkale/convert/StreamDecoder.java | 36 ++++---- .../org/redkale/convert/StreamEncoder.java | 55 ++++++------ src/main/java/org/redkale/convert/Writer.java | 27 +++--- .../org/redkale/convert/bson/BsonWriter.java | 11 +-- .../convert/ext/BoolArraySimpledCoder.java | 15 ++-- .../convert/ext/ByteBufferSimpledCoder.java | 15 ++-- .../convert/ext/CharArraySimpledCoder.java | 15 ++-- .../convert/ext/DoubleArraySimpledCoder.java | 15 ++-- .../convert/ext/FloatArraySimpledCoder.java | 15 ++-- .../convert/ext/IntArraySimpledCoder.java | 15 ++-- .../convert/ext/LongArraySimpledCoder.java | 15 ++-- .../convert/ext/ShortArraySimpledCoder.java | 15 ++-- .../convert/ext/StringArraySimpledCoder.java | 15 ++-- .../org/redkale/convert/json/JsonWriter.java | 11 +-- .../convert/pb/ProtobufArrayEncoder.java | 14 +-- .../convert/pb/ProtobufCollectionEncoder.java | 13 +-- .../convert/pb/ProtobufDynEncoder.java | 23 ++--- .../convert/pb/ProtobufStreamEncoder.java | 15 +--- .../redkale/convert/pb/ProtobufWriter.java | 30 ++----- 27 files changed, 355 insertions(+), 394 deletions(-) diff --git a/src/main/java/org/redkale/convert/ArrayDecoder.java b/src/main/java/org/redkale/convert/ArrayDecoder.java index 2210627ef..33289d553 100644 --- a/src/main/java/org/redkale/convert/ArrayDecoder.java +++ b/src/main/java/org/redkale/convert/ArrayDecoder.java @@ -71,22 +71,7 @@ public class ArrayDecoder implements TagDecodeable } } - @Override - public T[] convertFrom(R in) { - return convertFrom(in, null); - } - - public T[] convertFrom(R in, DeMember member) { - byte[] typevals = new byte[1]; - int len = in.readArrayB(member, typevals, componentDecoder); - int contentLength = -1; - if (len == Reader.SIGN_NULL) { - return null; - } - if (len == Reader.SIGN_NOLENBUTBYTES) { - contentLength = in.readMemberContentLength(member, componentDecoder); - len = Reader.SIGN_NOLENGTH; - } + protected void checkInited() { if (this.componentDecoder == null) { if (!this.inited) { lock.lock(); @@ -99,6 +84,25 @@ public class ArrayDecoder implements TagDecodeable } } } + } + + @Override + public T[] convertFrom(R in) { + return convertFrom(in, null); + } + + public T[] convertFrom(R in, DeMember member) { + this.checkInited(); + byte[] typevals = new byte[1]; + int len = in.readArrayB(member, typevals, componentDecoder); + int contentLength = -1; + if (len == Reader.SIGN_NULL) { + return null; + } + if (len == Reader.SIGN_NOLENBUTBYTES) { + contentLength = in.readMemberContentLength(member, componentDecoder); + len = Reader.SIGN_NOLENGTH; + } final Decodeable localDecoder = getComponentDecoder(this.componentDecoder, typevals); final List result = new ArrayList(); boolean first = true; diff --git a/src/main/java/org/redkale/convert/ArrayEncoder.java b/src/main/java/org/redkale/convert/ArrayEncoder.java index c496e7185..ad148963d 100644 --- a/src/main/java/org/redkale/convert/ArrayEncoder.java +++ b/src/main/java/org/redkale/convert/ArrayEncoder.java @@ -69,24 +69,8 @@ public class ArrayEncoder implements Encodeable { } } - @Override - public void convertTo(W out, T[] value) { - convertTo(out, null, value); - } - - public void convertTo(W out, EnMember member, T[] value) { - if (value == null) { - out.writeNull(); - return; - } - int iMax = value.length - 1; - if (iMax == -1) { - out.writeArrayB(0, this, componentEncoder, value); - out.writeArrayE(); - return; - } - Encodeable itemEncoder = this.componentEncoder; - if (itemEncoder == null) { + protected void checkInited() { + if (this.componentEncoder == null) { if (!this.inited) { lock.lock(); try { @@ -96,37 +80,54 @@ public class ArrayEncoder implements Encodeable { } finally { lock.unlock(); } - itemEncoder = this.componentEncoder; } } + } + + @Override + public void convertTo(W out, T[] value) { + convertTo(out, null, value); + } + + public void convertTo(W out, EnMember member, T[] value) { + this.checkInited(); + if (value == null) { + out.writeNull(); + return; + } + int iMax = value.length - 1; + if (iMax == -1) { + out.writeArrayB(0, componentEncoder, value); + out.writeArrayE(); + return; + } + Encodeable itemEncoder = this.componentEncoder; if (subTypeFinal) { - if (out.writeArrayB(value.length, this, itemEncoder, value) < 0) { - for (int i = 0; ; i++) { - writeMemberValue(out, member, itemEncoder, value[i], i); - if (i == iMax) { - break; - } - out.writeArrayMark(); + out.writeArrayB(value.length, itemEncoder, value); + for (int i = 0; ; i++) { + writeMemberValue(out, member, itemEncoder, value[i], i); + if (i == iMax) { + break; } + out.writeArrayMark(); } } else { - if (out.writeArrayB(value.length, this, itemEncoder, value) < 0) { - final Type comp = this.componentType; - for (int i = 0; ; i++) { - Object v = value[i]; - writeMemberValue( - out, - member, - ((v != null && (v.getClass() == comp || out.specificObjectType() == comp)) - ? itemEncoder - : anyEncoder), - v, - i); - if (i == iMax) { - break; - } - out.writeArrayMark(); + out.writeArrayB(value.length, itemEncoder, value); + final Type comp = this.componentType; + for (int i = 0; ; i++) { + Object v = value[i]; + writeMemberValue( + out, + member, + ((v != null && (v.getClass() == comp || out.specificObjectType() == comp)) + ? itemEncoder + : anyEncoder), + v, + i); + if (i == iMax) { + break; } + out.writeArrayMark(); } } out.writeArrayE(); diff --git a/src/main/java/org/redkale/convert/CollectionDecoder.java b/src/main/java/org/redkale/convert/CollectionDecoder.java index f9fb06262..d55deaccf 100644 --- a/src/main/java/org/redkale/convert/CollectionDecoder.java +++ b/src/main/java/org/redkale/convert/CollectionDecoder.java @@ -76,22 +76,7 @@ public class CollectionDecoder implements TagDecodeable convertFrom(R in) { - return convertFrom(in, null); - } - - public Collection convertFrom(R in, DeMember member) { - byte[] typevals = new byte[1]; - int len = in.readArrayB(member, typevals, componentDecoder); - int contentLength = -1; - if (len == Reader.SIGN_NULL) { - return null; - } - if (len == Reader.SIGN_NOLENBUTBYTES) { - contentLength = in.readMemberContentLength(member, componentDecoder); - len = Reader.SIGN_NOLENGTH; - } + protected void checkInited() { if (this.componentDecoder == null) { if (!this.inited) { lock.lock(); @@ -104,6 +89,25 @@ public class CollectionDecoder implements TagDecodeable convertFrom(R in) { + return convertFrom(in, null); + } + + public Collection convertFrom(R in, DeMember member) { + this.checkInited(); + byte[] typevals = new byte[1]; + int len = in.readArrayB(member, typevals, componentDecoder); + int contentLength = -1; + if (len == Reader.SIGN_NULL) { + return null; + } + if (len == Reader.SIGN_NOLENBUTBYTES) { + contentLength = in.readMemberContentLength(member, componentDecoder); + len = Reader.SIGN_NOLENGTH; + } final Decodeable localDecoder = getComponentDecoder(this.componentDecoder, typevals); final Collection result = this.creator.create(); boolean first = true; diff --git a/src/main/java/org/redkale/convert/CollectionEncoder.java b/src/main/java/org/redkale/convert/CollectionEncoder.java index bd441702d..1354f19e8 100644 --- a/src/main/java/org/redkale/convert/CollectionEncoder.java +++ b/src/main/java/org/redkale/convert/CollectionEncoder.java @@ -56,21 +56,7 @@ public class CollectionEncoder implements Encodeable value) { - convertTo(out, null, value); - } - - public void convertTo(W out, EnMember member, Collection value) { - if (value == null) { - out.writeNull(); - return; - } - if (value.isEmpty()) { - out.writeArrayB(0, this, componentEncoder, value); - out.writeArrayE(); - return; - } + protected void checkInited() { if (this.componentEncoder == null) { if (!this.inited) { lock.lock(); @@ -83,16 +69,33 @@ public class CollectionEncoder implements Encodeable value) { + convertTo(out, null, value); + } + + public void convertTo(W out, EnMember member, Collection value) { + this.checkInited(); + if (value == null) { + out.writeNull(); + return; + } + if (value.isEmpty()) { + out.writeArrayB(0, componentEncoder, value); + out.writeArrayE(); + return; + } + out.writeArrayB(value.size(), componentEncoder, value); + boolean first = true; + for (Object v : value) { + if (!first) { + out.writeArrayMark(); + } + writeMemberValue(out, member, v, first); + if (first) { + first = false; } } out.writeArrayE(); diff --git a/src/main/java/org/redkale/convert/MapDecoder.java b/src/main/java/org/redkale/convert/MapDecoder.java index 27b7b45e8..63239c0e4 100644 --- a/src/main/java/org/redkale/convert/MapDecoder.java +++ b/src/main/java/org/redkale/convert/MapDecoder.java @@ -98,12 +98,7 @@ public class MapDecoder implements TagDecodeable convertFrom(R in) { - return convertFrom(in, null); - } - - public Map convertFrom(R in, DeMember member) { + protected void checkInited() { if (this.keyDecoder == null || this.valueDecoder == null) { if (!this.inited) { lock.lock(); @@ -116,6 +111,16 @@ public class MapDecoder implements TagDecodeable convertFrom(R in) { + return convertFrom(in, null); + } + + @Override + public Map convertFrom(R in, DeMember member) { + this.checkInited(); byte[] typevals = new byte[2]; int len = in.readMapB(member, typevals, this.keyDecoder, this.valueDecoder); int contentLength = -1; diff --git a/src/main/java/org/redkale/convert/MapEncoder.java b/src/main/java/org/redkale/convert/MapEncoder.java index 8af7439d5..71ec4b00a 100644 --- a/src/main/java/org/redkale/convert/MapEncoder.java +++ b/src/main/java/org/redkale/convert/MapEncoder.java @@ -66,18 +66,7 @@ public class MapEncoder implements Encodeable value) { - convertTo(out, null, value); - } - - public void convertTo(W out, EnMember member, Map value) { - final Map values = value; - if (values == null) { - out.writeNull(); - return; - } - + protected void checkInited() { if (this.keyEncoder == null || this.valueEncoder == null) { if (!this.inited) { lock.lock(); @@ -90,22 +79,35 @@ public class MapEncoder implements Encodeable value) { + convertTo(out, null, value); + } + + public void convertTo(W out, EnMember member, Map value) { + this.checkInited(); + final Map values = value; + if (values == null) { + out.writeNull(); + return; + } Set ignoreColumns = this.ignoreMapColumns; BiFunction mapFieldFunc = (BiFunction) out.mapFieldFunc; - if (out.writeMapB(values.size(), (Encodeable) keyEncoder, (Encodeable) valueEncoder, value) < 0) { - boolean first = true; - for (Map.Entry en : values.entrySet()) { - if (ignoreColumns != null && ignoreColumns.contains(en.getKey())) { - continue; - } - V v = mapFieldFunc == null ? en.getValue() : mapFieldFunc.apply(en.getKey(), en.getValue()); - if (!first) { - out.writeArrayMark(); - } - writeMemberValue(out, member, en.getKey(), v, first); - if (first) { - first = false; - } + out.writeMapB(values.size(), (Encodeable) keyEncoder, (Encodeable) valueEncoder, value); + boolean first = true; + for (Map.Entry en : values.entrySet()) { + if (ignoreColumns != null && ignoreColumns.contains(en.getKey())) { + continue; + } + V v = mapFieldFunc == null ? en.getValue() : mapFieldFunc.apply(en.getKey(), en.getValue()); + if (!first) { + out.writeArrayMark(); + } + writeMemberValue(out, member, en.getKey(), v, first); + if (first) { + first = false; } } out.writeMapE(); diff --git a/src/main/java/org/redkale/convert/ObjectDecoder.java b/src/main/java/org/redkale/convert/ObjectDecoder.java index 179381b3e..2d461939f 100644 --- a/src/main/java/org/redkale/convert/ObjectDecoder.java +++ b/src/main/java/org/redkale/convert/ObjectDecoder.java @@ -7,8 +7,7 @@ package org.redkale.convert; import java.lang.reflect.*; import java.util.*; -import java.util.concurrent.locks.Condition; -import java.util.concurrent.locks.ReentrantLock; +import java.util.concurrent.locks.*; import org.redkale.annotation.Nullable; import org.redkale.convert.ext.StringSimpledCoder; import org.redkale.util.*; @@ -338,22 +337,7 @@ public class ObjectDecoder implements Decodeable { this.memberInfo = DeMemberInfo.create(deMembers); } - /** - * 对象格式: [0x1][short字段个数][字段名][字段值]...[0x2] - * - * @param in 输入流 - * @return 反解析后的对象结果 - */ - @Override - public T convertFrom(final R in) { - R objin = objectReader(in); - final String clazz = objin.readObjectB(typeClass); - if (clazz == null) { - return null; - } - if (!clazz.isEmpty()) { - return (T) factory.loadDecoder(factory.getEntityAlias(clazz)).convertFrom(objin); - } + protected void checkInited() { if (!this.inited) { lock.lock(); try { @@ -364,6 +348,25 @@ public class ObjectDecoder implements Decodeable { lock.unlock(); } } + } + + /** + * 对象格式: [0x1][short字段个数][字段名][字段值]...[0x2] + * + * @param in 输入流 + * @return 反解析后的对象结果 + */ + @Override + public T convertFrom(final R in) { + this.checkInited(); + R objin = objectReader(in); + final String clazz = objin.readObjectB(typeClass); + if (clazz == null) { + return null; + } + if (!clazz.isEmpty()) { + return (T) factory.loadDecoder(factory.getEntityAlias(clazz)).convertFrom(objin); + } if (this.creator == null) { if (typeClass.isInterface() || Modifier.isAbstract(typeClass.getModifiers())) { throw new ConvertException( diff --git a/src/main/java/org/redkale/convert/ObjectEncoder.java b/src/main/java/org/redkale/convert/ObjectEncoder.java index 625855c60..bf653c481 100644 --- a/src/main/java/org/redkale/convert/ObjectEncoder.java +++ b/src/main/java/org/redkale/convert/ObjectEncoder.java @@ -9,7 +9,7 @@ import java.lang.reflect.*; import java.util.*; import java.util.concurrent.locks.*; import org.redkale.annotation.ConstructorParameters; -import org.redkale.annotation.Nullable; +import org.redkale.annotation.*; import org.redkale.convert.ext.StringSimpledCoder; import org.redkale.util.*; @@ -309,12 +309,7 @@ public class ObjectEncoder implements Encodeable { this.members = enMembers; } - @Override - public void convertTo(W out, T value) { - if (value == null) { - out.writeObjectNull(null); - return; - } + protected void checkInited() { if (!this.inited) { lock.lock(); try { @@ -325,6 +320,15 @@ public class ObjectEncoder implements Encodeable { lock.unlock(); } } + } + + @Override + public void convertTo(W out, T value) { + this.checkInited(); + if (value == null) { + out.writeObjectNull(null); + return; + } if (value.getClass() != this.typeClass && !this.type.equals(out.specificObjectType())) { final Class clz = value.getClass(); if (out.needWriteClassName()) { @@ -334,28 +338,27 @@ public class ObjectEncoder implements Encodeable { return; } W objout = objectWriter(out, value); - if (objout.writeObjectB(value) < 0) { - int maxPosition = 0; - for (EnMember member : members) { - maxPosition = member.getPosition(); - objout.writeObjectField(member, value); - } - if (objout.objExtFunc != null) { - ConvertField[] extFields = objout.objExtFunc.apply(value); - if (extFields != null) { - Encodeable anyEncoder = factory.getAnyEncoder(); - for (ConvertField en : extFields) { - if (en == null) { - continue; - } - maxPosition++; - objout.writeObjectField( - en.getName(), - en.getType(), - Math.max(en.getPosition(), maxPosition), - anyEncoder, - en.getValue()); + objout.writeObjectB(value); + int maxPosition = 0; + for (EnMember member : members) { + maxPosition = member.getPosition(); + objout.writeObjectField(member, value); + } + if (objout.objExtFunc != null) { + ConvertField[] extFields = objout.objExtFunc.apply(value); + if (extFields != null) { + Encodeable anyEncoder = factory.getAnyEncoder(); + for (ConvertField en : extFields) { + if (en == null) { + continue; } + maxPosition++; + objout.writeObjectField( + en.getName(), + en.getType(), + Math.max(en.getPosition(), maxPosition), + anyEncoder, + en.getValue()); } } } diff --git a/src/main/java/org/redkale/convert/StreamDecoder.java b/src/main/java/org/redkale/convert/StreamDecoder.java index a81acbaa5..fcdda4f0d 100644 --- a/src/main/java/org/redkale/convert/StreamDecoder.java +++ b/src/main/java/org/redkale/convert/StreamDecoder.java @@ -57,22 +57,7 @@ public class StreamDecoder implements TagDecodeable convertFrom(R in) { - return convertFrom(in, null); - } - - public Stream convertFrom(R in, DeMember member) { - byte[] typevals = new byte[1]; - int len = in.readArrayB(member, typevals, this.componentDecoder); - int contentLength = -1; - if (len == Reader.SIGN_NULL) { - return null; - } - if (len == Reader.SIGN_NOLENBUTBYTES) { - contentLength = in.readMemberContentLength(member, this.componentDecoder); - len = Reader.SIGN_NOLENGTH; - } + protected void checkInited() { if (this.componentDecoder == null) { if (!this.inited) { lock.lock(); @@ -85,6 +70,25 @@ public class StreamDecoder implements TagDecodeable convertFrom(R in) { + return convertFrom(in, null); + } + + public Stream convertFrom(R in, DeMember member) { + this.checkInited(); + byte[] typevals = new byte[1]; + int len = in.readArrayB(member, typevals, this.componentDecoder); + int contentLength = -1; + if (len == Reader.SIGN_NULL) { + return null; + } + if (len == Reader.SIGN_NOLENBUTBYTES) { + contentLength = in.readMemberContentLength(member, this.componentDecoder); + len = Reader.SIGN_NOLENGTH; + } final Decodeable localDecoder = getComponentDecoder(this.componentDecoder, typevals); final List result = new ArrayList(); boolean first = true; diff --git a/src/main/java/org/redkale/convert/StreamEncoder.java b/src/main/java/org/redkale/convert/StreamEncoder.java index 868d13fc7..3ea089e25 100644 --- a/src/main/java/org/redkale/convert/StreamEncoder.java +++ b/src/main/java/org/redkale/convert/StreamEncoder.java @@ -56,22 +56,7 @@ public class StreamEncoder implements Encodeable value) { - convertTo(out, null, value); - } - - public void convertTo(W out, EnMember member, Stream value) { - if (value == null) { - out.writeNull(); - return; - } - Object[] array = value.toArray(); - if (array.length == 0) { - out.writeArrayB(0, this, componentEncoder, array); - out.writeArrayE(); - return; - } + protected void checkInited() { if (this.componentEncoder == null) { if (!this.inited) { lock.lock(); @@ -84,16 +69,34 @@ public class StreamEncoder implements Encodeable value) { + convertTo(out, null, value); + } + + public void convertTo(W out, EnMember member, Stream value) { + this.checkInited(); + if (value == null) { + out.writeNull(); + return; + } + Object[] array = value.toArray(); + if (array.length == 0) { + out.writeArrayB(0, componentEncoder, array); + out.writeArrayE(); + return; + } + out.writeArrayB(array.length, componentEncoder, array); + boolean first = true; + for (Object v : array) { + if (!first) { + out.writeArrayMark(); + } + writeMemberValue(out, member, v, first); + if (first) { + first = false; } } out.writeArrayE(); diff --git a/src/main/java/org/redkale/convert/Writer.java b/src/main/java/org/redkale/convert/Writer.java index f12c4f746..abc26706e 100644 --- a/src/main/java/org/redkale/convert/Writer.java +++ b/src/main/java/org/redkale/convert/Writer.java @@ -109,17 +109,6 @@ public abstract class Writer { */ public abstract void writeClassName(String clazz); - /** - * 输出一个对象前的操作 注: 覆盖此方法必须要先调用父方法 super.writeObjectB(obj); - * - * @param obj 写入的对象 - * @return 返回-1表示还没有写入对象内容,大于-1表示已写入对象内容,返回对象内容大小 - */ - public int writeObjectB(Object obj) { - this.comma = false; - return -1; - } - /** * 输出一个为null的对象 * @@ -221,6 +210,15 @@ public abstract class Writer { this.writeFieldName(member, attr.field(), attr.genericType(), member.getPosition()); } + /** + * 输出一个对象前的操作 注: 覆盖此方法必须要先调用父方法 super.writeObjectB(obj); + * + * @param obj 写入的对象 + */ + public void writeObjectB(Object obj) { + this.comma = false; + } + /** * 输出一个对象后的操作 * @@ -232,12 +230,10 @@ public abstract class Writer { * 输出一个数组前的操作 * * @param size 数组长度 - * @param arrayEncoder Encodeable 可能是ArrayEncoder、CollectionEncoder或StreamEncoder * @param componentEncoder Encodeable * @param obj 对象, 不一定是数组、Collection对象,也可能是伪Collection对象 - * @return 返回-1表示还没有写入对象内容,大于-1表示已写入对象内容,返回对象内容大小 */ - public abstract int writeArrayB(int size, Encodeable arrayEncoder, Encodeable componentEncoder, Object obj); + public abstract void writeArrayB(int size, Encodeable componentEncoder, Object obj); /** 输出数组元素间的间隔符 */ public abstract void writeArrayMark(); @@ -252,9 +248,8 @@ public abstract class Writer { * @param keyEncoder Encodeable * @param valueEncoder Encodeable * @param obj 对象, 不一定是Map对象,也可能是伪Map对象 - * @return 返回-1表示还没有写入对象内容,大于-1表示已写入对象内容,返回对象内容大小 */ - public abstract int writeMapB(int size, Encodeable keyEncoder, Encodeable valueEncoder, Object obj); + public abstract void writeMapB(int size, Encodeable keyEncoder, Encodeable valueEncoder, Object obj); /** 输出一个Map中key与value间的间隔符 */ public abstract void writeMapMark(); diff --git a/src/main/java/org/redkale/convert/bson/BsonWriter.java b/src/main/java/org/redkale/convert/bson/BsonWriter.java index c1a97b151..121d777b3 100644 --- a/src/main/java/org/redkale/convert/bson/BsonWriter.java +++ b/src/main/java/org/redkale/convert/bson/BsonWriter.java @@ -179,7 +179,7 @@ public class BsonWriter extends Writer implements ByteTuple { writeNull(); return; } - writeArrayB(values.length, null, null, values); + writeArrayB(values.length, null, values); boolean flag = false; for (byte v : values) { if (flag) { @@ -240,11 +240,10 @@ public class BsonWriter extends Writer implements ByteTuple { } @Override - public final int writeObjectB(Object obj) { + public final void writeObjectB(Object obj) { super.writeObjectB(obj); writeSmallString(""); writeShort(BsonReader.SIGN_OBJECTB); - return -1; } @Override @@ -311,12 +310,11 @@ public class BsonWriter extends Writer implements ByteTuple { } @Override - public final int writeArrayB(int size, Encodeable arrayEncoder, Encodeable componentEncoder, Object obj) { + public final void writeArrayB(int size, Encodeable componentEncoder, Object obj) { writeInt(size); if (componentEncoder != null && componentEncoder != ByteSimpledCoder.instance) { writeByte(BsonFactory.typeEnum(componentEncoder.getType())); } - return -1; } @Override @@ -330,11 +328,10 @@ public class BsonWriter extends Writer implements ByteTuple { } @Override - public int writeMapB(int size, Encodeable keyEncoder, Encodeable valueEncoder, Object obj) { + public void writeMapB(int size, Encodeable keyEncoder, Encodeable valueEncoder, Object obj) { writeInt(size); writeByte(BsonFactory.typeEnum(keyEncoder.getType())); writeByte(BsonFactory.typeEnum(valueEncoder.getType())); - return -1; } @Override diff --git a/src/main/java/org/redkale/convert/ext/BoolArraySimpledCoder.java b/src/main/java/org/redkale/convert/ext/BoolArraySimpledCoder.java index faa3a05f3..58c1a3914 100644 --- a/src/main/java/org/redkale/convert/ext/BoolArraySimpledCoder.java +++ b/src/main/java/org/redkale/convert/ext/BoolArraySimpledCoder.java @@ -26,15 +26,14 @@ public final class BoolArraySimpledCoder ext out.writeNull(); return; } - if (out.writeArrayB(values.length, this, BoolSimpledCoder.instance, values) < 0) { - boolean flag = false; - for (boolean v : values) { - if (flag) { - out.writeArrayMark(); - } - out.writeBoolean(v); - flag = true; + out.writeArrayB(values.length, BoolSimpledCoder.instance, values); + boolean flag = false; + for (boolean v : values) { + if (flag) { + out.writeArrayMark(); } + out.writeBoolean(v); + flag = true; } out.writeArrayE(); } diff --git a/src/main/java/org/redkale/convert/ext/ByteBufferSimpledCoder.java b/src/main/java/org/redkale/convert/ext/ByteBufferSimpledCoder.java index 4087c9e99..153a8adb6 100644 --- a/src/main/java/org/redkale/convert/ext/ByteBufferSimpledCoder.java +++ b/src/main/java/org/redkale/convert/ext/ByteBufferSimpledCoder.java @@ -27,15 +27,14 @@ public final class ByteBufferSimpledCoder ex out.writeNull(); return; } - if (out.writeArrayB(value.remaining(), this, ByteSimpledCoder.instance, value) < 0) { - boolean flag = false; - for (byte v : value.array()) { - if (flag) { - out.writeArrayMark(); - } - out.writeByte(v); - flag = true; + out.writeArrayB(value.remaining(), ByteSimpledCoder.instance, value); + boolean flag = false; + for (byte v : value.array()) { + if (flag) { + out.writeArrayMark(); } + out.writeByte(v); + flag = true; } out.writeArrayE(); } diff --git a/src/main/java/org/redkale/convert/ext/CharArraySimpledCoder.java b/src/main/java/org/redkale/convert/ext/CharArraySimpledCoder.java index 601d7cde3..45c115841 100644 --- a/src/main/java/org/redkale/convert/ext/CharArraySimpledCoder.java +++ b/src/main/java/org/redkale/convert/ext/CharArraySimpledCoder.java @@ -26,15 +26,14 @@ public final class CharArraySimpledCoder ext out.writeNull(); return; } - if (out.writeArrayB(values.length, this, CharSimpledCoder.instance, values) < 0) { - boolean flag = false; - for (char v : values) { - if (flag) { - out.writeArrayMark(); - } - out.writeChar(v); - flag = true; + out.writeArrayB(values.length, CharSimpledCoder.instance, values); + boolean flag = false; + for (char v : values) { + if (flag) { + out.writeArrayMark(); } + out.writeChar(v); + flag = true; } out.writeArrayE(); } diff --git a/src/main/java/org/redkale/convert/ext/DoubleArraySimpledCoder.java b/src/main/java/org/redkale/convert/ext/DoubleArraySimpledCoder.java index dd66856ce..e83bed43f 100644 --- a/src/main/java/org/redkale/convert/ext/DoubleArraySimpledCoder.java +++ b/src/main/java/org/redkale/convert/ext/DoubleArraySimpledCoder.java @@ -27,15 +27,14 @@ public final class DoubleArraySimpledCoder e out.writeNull(); return; } - if (out.writeArrayB(values.length, this, DoubleSimpledCoder.instance, values) < 0) { - boolean flag = false; - for (double v : values) { - if (flag) { - out.writeArrayMark(); - } - out.writeDouble(v); - flag = true; + out.writeArrayB(values.length, DoubleSimpledCoder.instance, values); + boolean flag = false; + for (double v : values) { + if (flag) { + out.writeArrayMark(); } + out.writeDouble(v); + flag = true; } out.writeArrayE(); } diff --git a/src/main/java/org/redkale/convert/ext/FloatArraySimpledCoder.java b/src/main/java/org/redkale/convert/ext/FloatArraySimpledCoder.java index ffc886e2d..8b4d4063c 100644 --- a/src/main/java/org/redkale/convert/ext/FloatArraySimpledCoder.java +++ b/src/main/java/org/redkale/convert/ext/FloatArraySimpledCoder.java @@ -26,15 +26,14 @@ public final class FloatArraySimpledCoder ex out.writeNull(); return; } - if (out.writeArrayB(values.length, this, FloatSimpledCoder.instance, values) < 0) { - boolean flag = false; - for (float v : values) { - if (flag) { - out.writeArrayMark(); - } - out.writeFloat(v); - flag = true; + out.writeArrayB(values.length, FloatSimpledCoder.instance, values); + boolean flag = false; + for (float v : values) { + if (flag) { + out.writeArrayMark(); } + out.writeFloat(v); + flag = true; } out.writeArrayE(); } diff --git a/src/main/java/org/redkale/convert/ext/IntArraySimpledCoder.java b/src/main/java/org/redkale/convert/ext/IntArraySimpledCoder.java index a52d6f76d..46b58ae7f 100644 --- a/src/main/java/org/redkale/convert/ext/IntArraySimpledCoder.java +++ b/src/main/java/org/redkale/convert/ext/IntArraySimpledCoder.java @@ -27,15 +27,14 @@ public final class IntArraySimpledCoder exte out.writeNull(); return; } - if (out.writeArrayB(values.length, this, IntSimpledCoder.instance, values) < 0) { - boolean flag = false; - for (int v : values) { - if (flag) { - out.writeArrayMark(); - } - out.writeInt(v); - flag = true; + out.writeArrayB(values.length, IntSimpledCoder.instance, values); + boolean flag = false; + for (int v : values) { + if (flag) { + out.writeArrayMark(); } + out.writeInt(v); + flag = true; } out.writeArrayE(); } diff --git a/src/main/java/org/redkale/convert/ext/LongArraySimpledCoder.java b/src/main/java/org/redkale/convert/ext/LongArraySimpledCoder.java index 45c07f7fd..c59698970 100644 --- a/src/main/java/org/redkale/convert/ext/LongArraySimpledCoder.java +++ b/src/main/java/org/redkale/convert/ext/LongArraySimpledCoder.java @@ -27,15 +27,14 @@ public final class LongArraySimpledCoder ext out.writeNull(); return; } - if (out.writeArrayB(values.length, this, LongSimpledCoder.instance, values) < 0) { - boolean flag = false; - for (long v : values) { - if (flag) { - out.writeArrayMark(); - } - out.writeLong(v); - flag = true; + out.writeArrayB(values.length, LongSimpledCoder.instance, values); + boolean flag = false; + for (long v : values) { + if (flag) { + out.writeArrayMark(); } + out.writeLong(v); + flag = true; } out.writeArrayE(); } diff --git a/src/main/java/org/redkale/convert/ext/ShortArraySimpledCoder.java b/src/main/java/org/redkale/convert/ext/ShortArraySimpledCoder.java index c07a48234..6c811ae23 100644 --- a/src/main/java/org/redkale/convert/ext/ShortArraySimpledCoder.java +++ b/src/main/java/org/redkale/convert/ext/ShortArraySimpledCoder.java @@ -26,15 +26,14 @@ public final class ShortArraySimpledCoder ex out.writeNull(); return; } - if (out.writeArrayB(values.length, this, ShortSimpledCoder.instance, values) < 0) { - boolean flag = false; - for (short v : values) { - if (flag) { - out.writeArrayMark(); - } - out.writeShort(v); - flag = true; + out.writeArrayB(values.length, ShortSimpledCoder.instance, values); + boolean flag = false; + for (short v : values) { + if (flag) { + out.writeArrayMark(); } + out.writeShort(v); + flag = true; } out.writeArrayE(); } diff --git a/src/main/java/org/redkale/convert/ext/StringArraySimpledCoder.java b/src/main/java/org/redkale/convert/ext/StringArraySimpledCoder.java index 34f7e308d..9cc169e1b 100644 --- a/src/main/java/org/redkale/convert/ext/StringArraySimpledCoder.java +++ b/src/main/java/org/redkale/convert/ext/StringArraySimpledCoder.java @@ -26,15 +26,14 @@ public final class StringArraySimpledCoder e out.writeNull(); return; } - if (out.writeArrayB(values.length, this, StringSimpledCoder.instance, values) < 0) { - boolean flag = false; - for (String v : values) { - if (flag) { - out.writeArrayMark(); - } - out.writeString(v); - flag = true; + out.writeArrayB(values.length, StringSimpledCoder.instance, values); + boolean flag = false; + for (String v : values) { + if (flag) { + out.writeArrayMark(); } + out.writeString(v); + flag = true; } out.writeArrayE(); } diff --git a/src/main/java/org/redkale/convert/json/JsonWriter.java b/src/main/java/org/redkale/convert/json/JsonWriter.java index c9709d40f..5fc291d37 100644 --- a/src/main/java/org/redkale/convert/json/JsonWriter.java +++ b/src/main/java/org/redkale/convert/json/JsonWriter.java @@ -183,7 +183,7 @@ public abstract class JsonWriter extends Writer { writeNull(); return; } - writeArrayB(values.length, null, null, values); + writeArrayB(values.length, null, values); boolean flag = false; for (byte v : values) { if (flag) { @@ -224,10 +224,9 @@ public abstract class JsonWriter extends Writer { public final void writeClassName(String clazz) {} @Override - public final int writeObjectB(Object obj) { + public final void writeObjectB(Object obj) { super.writeObjectB(obj); writeTo(BYTE_LBRACE); - return -1; } @Override @@ -241,9 +240,8 @@ public abstract class JsonWriter extends Writer { } @Override - public final int writeArrayB(int size, Encodeable arrayEncoder, Encodeable componentEncoder, Object obj) { + public final void writeArrayB(int size, Encodeable componentEncoder, Object obj) { writeTo(BYTE_LBRACKET); - return -1; } @Override @@ -257,9 +255,8 @@ public abstract class JsonWriter extends Writer { } @Override - public final int writeMapB(int size, Encodeable keyEncoder, Encodeable valueEncoder, Object obj) { + public final void writeMapB(int size, Encodeable keyEncoder, Encodeable valueEncoder, Object obj) { writeTo(BYTE_LBRACE); - return -1; } @Override diff --git a/src/main/java/org/redkale/convert/pb/ProtobufArrayEncoder.java b/src/main/java/org/redkale/convert/pb/ProtobufArrayEncoder.java index 486974db3..0daa4c52c 100644 --- a/src/main/java/org/redkale/convert/pb/ProtobufArrayEncoder.java +++ b/src/main/java/org/redkale/convert/pb/ProtobufArrayEncoder.java @@ -9,29 +9,21 @@ import java.lang.reflect.Type; import org.redkale.convert.*; /** + * 非基本类型数组序列化。 注意: 基础类型不能使用此类 * @author zhangjx * @param T */ public class ProtobufArrayEncoder extends ArrayEncoder { - protected final boolean simple; - public ProtobufArrayEncoder(ProtobufFactory factory, Type type) { super(factory, type); - this.simple = ProtobufFactory.isNoLenBytesType(getComponentType()); } @Override protected void writeMemberValue(ProtobufWriter out, EnMember member, Encodeable encoder, Object item, int index) { - if (simple) { - if (item == null) { - out.writeUInt32(0); - } else { - componentEncoder.convertTo(out, item); - } - return; + if (member != null) { + out.writeFieldName(member); } - if (member != null) out.writeFieldName(member); if (item == null) { out.writeUInt32(0); } else if (item instanceof CharSequence) { diff --git a/src/main/java/org/redkale/convert/pb/ProtobufCollectionEncoder.java b/src/main/java/org/redkale/convert/pb/ProtobufCollectionEncoder.java index 86ae1b700..933144f8a 100644 --- a/src/main/java/org/redkale/convert/pb/ProtobufCollectionEncoder.java +++ b/src/main/java/org/redkale/convert/pb/ProtobufCollectionEncoder.java @@ -14,24 +14,15 @@ import org.redkale.convert.*; */ public class ProtobufCollectionEncoder extends CollectionEncoder { - protected final boolean simple; - public ProtobufCollectionEncoder(ProtobufFactory factory, Type type) { super(factory, type); - this.simple = ProtobufFactory.isNoLenBytesType(getComponentType()); } @Override protected void writeMemberValue(ProtobufWriter out, EnMember member, Object item, boolean first) { - if (simple) { - if (item == null) { - out.writeUInt32(0); - } else { - componentEncoder.convertTo(out, item); - } - return; + if (member != null) { + out.writeFieldName(member); } - if (member != null) out.writeFieldName(member); if (item == null) { out.writeUInt32(0); } else if (item instanceof CharSequence) { diff --git a/src/main/java/org/redkale/convert/pb/ProtobufDynEncoder.java b/src/main/java/org/redkale/convert/pb/ProtobufDynEncoder.java index dd5e3f231..79feeffcf 100644 --- a/src/main/java/org/redkale/convert/pb/ProtobufDynEncoder.java +++ b/src/main/java/org/redkale/convert/pb/ProtobufDynEncoder.java @@ -4,25 +4,15 @@ */ package org.redkale.convert.pb; -import java.lang.reflect.Field; +import java.lang.reflect.*; import java.lang.reflect.Type; -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.concurrent.atomic.AtomicLong; -import org.redkale.asm.Asms; -import org.redkale.asm.ClassWriter; +import java.util.*; +import java.util.concurrent.atomic.*; import static org.redkale.asm.ClassWriter.COMPUTE_FRAMES; -import org.redkale.asm.FieldVisitor; -import org.redkale.asm.Label; -import org.redkale.asm.MethodVisitor; -import org.redkale.asm.Opcodes; +import org.redkale.asm.*; import static org.redkale.asm.Opcodes.*; import org.redkale.convert.*; -import org.redkale.util.AnyValue; -import org.redkale.util.RedkaleClassLoader; -import org.redkale.util.RedkaleException; -import org.redkale.util.Utility; +import org.redkale.util.*; /** * 简单对象的PROTOBUF序列化操作类 @@ -179,8 +169,7 @@ public abstract class ProtobufDynEncoder extends ProtobufObjectEncoder { mv.visitVarInsn(ALOAD, 3); mv.visitVarInsn(ALOAD, 2); - mv.visitMethodInsn(INVOKEVIRTUAL, pbwriterName, "writeObjectB", "(Ljava/lang/Object;)I", false); - mv.visitInsn(POP); + mv.visitMethodInsn(INVOKEVIRTUAL, pbwriterName, "writeObjectB", "(Ljava/lang/Object;)V", false); for (EnMember member : selfObjEncoder.getMembers()) { final String fieldName = member.getAttribute().field(); diff --git a/src/main/java/org/redkale/convert/pb/ProtobufStreamEncoder.java b/src/main/java/org/redkale/convert/pb/ProtobufStreamEncoder.java index 851c3c54e..b909fa458 100644 --- a/src/main/java/org/redkale/convert/pb/ProtobufStreamEncoder.java +++ b/src/main/java/org/redkale/convert/pb/ProtobufStreamEncoder.java @@ -14,27 +14,18 @@ import org.redkale.convert.*; */ public class ProtobufStreamEncoder extends StreamEncoder { - protected final boolean simple; - public ProtobufStreamEncoder(ConvertFactory factory, Type type) { super(factory, type); - this.simple = ProtobufFactory.isNoLenBytesType(getComponentType()); } @Override protected void writeMemberValue(ProtobufWriter out, EnMember member, Object item, boolean first) { - if (simple) { - if (item == null) { - out.writeUInt32(0); - } else { - componentEncoder.convertTo(out, item); - } - return; - } if (member != null) { out.writeFieldName(member); } - if (item instanceof CharSequence) { + if (item == null) { + out.writeUInt32(0); + } else if (item instanceof CharSequence) { componentEncoder.convertTo(out, item); } else { ProtobufWriter tmp = out.pollChild(); diff --git a/src/main/java/org/redkale/convert/pb/ProtobufWriter.java b/src/main/java/org/redkale/convert/pb/ProtobufWriter.java index ed082d9b6..c2d484f02 100644 --- a/src/main/java/org/redkale/convert/pb/ProtobufWriter.java +++ b/src/main/java/org/redkale/convert/pb/ProtobufWriter.java @@ -279,9 +279,9 @@ public class ProtobufWriter extends Writer implements ByteTuple { } @Override - public int writeObjectB(Object obj) { - super.writeObjectB(obj); - return -1; + @ClassDepends + public void writeObjectB(Object obj) { + // do nothing } @Override @@ -293,8 +293,8 @@ public class ProtobufWriter extends Writer implements ByteTuple { } @Override - public int writeArrayB(int size, Encodeable encoder, Encodeable componentEncoder, Object obj) { - return -1; + public void writeArrayB(int size, Encodeable componentEncoder, Object obj) { + // do nothing } @Override @@ -308,8 +308,8 @@ public class ProtobufWriter extends Writer implements ByteTuple { } @Override - public int writeMapB(int size, Encodeable keyEncoder, Encodeable valueEncoder, Object obj) { - return -1; + public void writeMapB(int size, Encodeable keyEncoder, Encodeable valueEncoder, Object obj) { + // do nothing } @Override @@ -329,21 +329,7 @@ public class ProtobufWriter extends Writer implements ByteTuple { @Override public final void writeByteArray(byte[] values) { - if (values == null) { - writeNull(); - return; - } - if (writeArrayB(values.length, null, null, values) < 0) { - boolean flag = false; - for (byte v : values) { - if (flag) { - writeArrayMark(); - } - writeByte(v); - flag = true; - } - } - writeArrayE(); + writeBytes(values); } @Override