diff --git a/src/org/redkale/convert/ArrayDecoder.java b/src/org/redkale/convert/ArrayDecoder.java index 779ef4ada..4af0253e1 100644 --- a/src/org/redkale/convert/ArrayDecoder.java +++ b/src/org/redkale/convert/ArrayDecoder.java @@ -89,8 +89,8 @@ public class ArrayDecoder implements Decodeable { boolean first = true; if (len == Reader.SIGN_NOLENGTH) { int startPosition = in.position(); - while (in.hasNext(this, member, startPosition, contentLength)) { - Reader itemReader = getArrayItemReader(in, member, first); + while (hasNext(in, member, startPosition, contentLength, first)) { + Reader itemReader = getItemReader(in, member, first); result.add(readMemberValue(itemReader, member, first)); first = false; } @@ -104,7 +104,11 @@ public class ArrayDecoder implements Decodeable { return result.toArray(rs); } - protected Reader getArrayItemReader(Reader in, DeMember member, boolean first) { + protected boolean hasNext(Reader in, DeMember member, int startPosition, int contentLength, boolean first) { + return in.hasNext(startPosition, contentLength); + } + + protected Reader getItemReader(Reader in, DeMember member, boolean first) { return in; } diff --git a/src/org/redkale/convert/CollectionDecoder.java b/src/org/redkale/convert/CollectionDecoder.java index ccd7b2ab7..ad87fb639 100644 --- a/src/org/redkale/convert/CollectionDecoder.java +++ b/src/org/redkale/convert/CollectionDecoder.java @@ -89,8 +89,9 @@ public class CollectionDecoder implements Decodeable> { boolean first = true; if (len == Reader.SIGN_NOLENGTH) { int startPosition = in.position(); - while (in.hasNext(this, member, startPosition, contentLength)) { - result.add(readMemberValue(in, member, first)); + while (hasNext(in, member, startPosition, contentLength, first)) { + Reader itemReader = getItemReader(in, member, first); + result.add(readMemberValue(itemReader, member, first)); first = false; } } else { @@ -102,6 +103,14 @@ public class CollectionDecoder implements Decodeable> { return result; } + protected boolean hasNext(Reader in, DeMember member, int startPosition, int contentLength, boolean first) { + return in.hasNext(startPosition, contentLength); + } + + protected Reader getItemReader(Reader in, DeMember member, boolean first) { + return in; + } + protected T readMemberValue(Reader in, DeMember member, boolean first) { return this.decoder.convertFrom(in); } diff --git a/src/org/redkale/convert/MapDecoder.java b/src/org/redkale/convert/MapDecoder.java index a4703f380..fccf625d9 100644 --- a/src/org/redkale/convert/MapDecoder.java +++ b/src/org/redkale/convert/MapDecoder.java @@ -102,8 +102,8 @@ public class MapDecoder implements Decodeable> { boolean first = true; if (len == Reader.SIGN_NOLENGTH) { int startPosition = in.position(); - while (in.hasNext(this, member, startPosition, contentLength)) { - Reader entryReader = getMapEntryReader(in, member, first); + while (hasNext(in, member, startPosition, contentLength, first)) { + Reader entryReader = getEntryReader(in, member, first); K key = readKeyMember(entryReader, member, first); entryReader.readBlank(); V value = readValueMember(entryReader, member, first); @@ -123,7 +123,11 @@ public class MapDecoder implements Decodeable> { return result; } - protected Reader getMapEntryReader(Reader in, DeMember member, boolean first) { + protected boolean hasNext(Reader in, DeMember member, int startPosition, int contentLength, boolean first) { + return in.hasNext(startPosition, contentLength); + } + + protected Reader getEntryReader(Reader in, DeMember member, boolean first) { return in; } diff --git a/src/org/redkale/convert/ObjectDecoder.java b/src/org/redkale/convert/ObjectDecoder.java index 19c81ddae..13faa47f7 100644 --- a/src/org/redkale/convert/ObjectDecoder.java +++ b/src/org/redkale/convert/ObjectDecoder.java @@ -222,7 +222,7 @@ public class ObjectDecoder implements Decodeable { if (this.creatorConstructorMembers == null) { //空构造函数 final T result = this.creator.create(); boolean first = true; - while (hasNext(in)) { + while (hasNext(in, first)) { DeMember member = in.readFieldName(members); in.readBlank(); if (member == null) { @@ -230,8 +230,8 @@ public class ObjectDecoder implements Decodeable { } else { readMemberValue(in, member, result, first); } + first = false; } - first = false; in.readObjectE(typeClass); return result; } else { //带参数的构造函数 @@ -240,7 +240,7 @@ public class ObjectDecoder implements Decodeable { final Object[][] otherParams = new Object[this.members.length][2]; int oc = 0; boolean first = true; - while (hasNext(in)) { + while (hasNext(in, first)) { DeMember member = in.readFieldName(members); in.readBlank(); if (member == null) { @@ -269,7 +269,7 @@ public class ObjectDecoder implements Decodeable { } } - protected boolean hasNext(R in) { + protected boolean hasNext(R in, boolean first) { return in.hasNext(); } diff --git a/src/org/redkale/convert/Reader.java b/src/org/redkale/convert/Reader.java index cd53829db..b20264008 100644 --- a/src/org/redkale/convert/Reader.java +++ b/src/org/redkale/convert/Reader.java @@ -28,14 +28,12 @@ public abstract class Reader { * 是否还存在下个元素或字段
* 注意: 主要用于Array、Collection、Stream或Map等集合对象 * - * @param self Decodeable - * @param member DeMember * @param startPosition 起始位置 * @param contentLength 内容大小, 不确定的传-1 * * @return 是否还存在下个元素或字段 */ - public abstract boolean hasNext(Decodeable self, DeMember member, int startPosition, int contentLength); + public abstract boolean hasNext(int startPosition, int contentLength); /** * 是否还存在下个元素或字段 @@ -44,7 +42,7 @@ public abstract class Reader { * @return 是否还存在下个元素或字段 */ public boolean hasNext() { - return hasNext(null, null, -1, -1); + return hasNext(-1, -1); } /** diff --git a/src/org/redkale/convert/StreamDecoder.java b/src/org/redkale/convert/StreamDecoder.java index fee7efb7b..8126bbd85 100644 --- a/src/org/redkale/convert/StreamDecoder.java +++ b/src/org/redkale/convert/StreamDecoder.java @@ -85,8 +85,9 @@ public class StreamDecoder implements Decodeable> { boolean first = true; if (len == Reader.SIGN_NOLENGTH) { int startPosition = in.position(); - while (in.hasNext(this, member, startPosition, contentLength)) { - result.add(readMemberValue(in, member, first)); + while (hasNext(in, member, startPosition, contentLength, first)) { + Reader itemReader = getItemReader(in, member, first); + result.add(readMemberValue(itemReader, member, first)); first = false; } } else { @@ -98,6 +99,14 @@ public class StreamDecoder implements Decodeable> { return result.stream(); } + protected boolean hasNext(Reader in, DeMember member, int startPosition, int contentLength, boolean first) { + return in.hasNext(startPosition, contentLength); + } + + protected Reader getItemReader(Reader in, DeMember member, boolean first) { + return in; + } + protected T readMemberValue(Reader in, DeMember member, boolean first) { return this.decoder.convertFrom(in); } diff --git a/src/org/redkale/convert/bson/BsonReader.java b/src/org/redkale/convert/bson/BsonReader.java index 7efd5a6a7..609a77f6d 100644 --- a/src/org/redkale/convert/bson/BsonReader.java +++ b/src/org/redkale/convert/bson/BsonReader.java @@ -215,15 +215,13 @@ public class BsonReader extends Reader { /** * 判断对象是否存在下一个属性或者数组是否存在下一个元素 * - * @param self Decodeable - * @param member DeMember * @param startPosition 起始位置 * @param contentLength 内容大小, 不确定的传-1 * * @return 是否存在 */ @Override - public boolean hasNext(Decodeable self, DeMember member, int startPosition, int contentLength) { + public boolean hasNext(int startPosition, int contentLength) { byte b = readByte(); if (b == SIGN_HASNEXT) return true; if (b != SIGN_NONEXT) throw new ConvertException("hasNext option must be (" + (SIGN_HASNEXT) @@ -276,7 +274,7 @@ public class BsonReader extends Reader { int size = 0; byte[] data = new byte[8]; int startPosition = position(); - while (hasNext(null, null, startPosition, contentLength)) { + while (hasNext(startPosition, contentLength)) { if (size >= data.length) { byte[] newdata = new byte[data.length + 4]; System.arraycopy(data, 0, newdata, 0, size); diff --git a/src/org/redkale/convert/ext/BoolArraySimpledCoder.java b/src/org/redkale/convert/ext/BoolArraySimpledCoder.java index 18e5fc481..64e1271ea 100644 --- a/src/org/redkale/convert/ext/BoolArraySimpledCoder.java +++ b/src/org/redkale/convert/ext/BoolArraySimpledCoder.java @@ -53,7 +53,7 @@ public final class BoolArraySimpledCoder ext int size = 0; boolean[] data = new boolean[8]; int startPosition = in.position(); - while (in.hasNext(this, null, startPosition, contentLength)) { + while (in.hasNext(startPosition, contentLength)) { if (size >= data.length) { boolean[] newdata = new boolean[data.length + 4]; System.arraycopy(data, 0, newdata, 0, size); diff --git a/src/org/redkale/convert/ext/ByteBufferSimpledCoder.java b/src/org/redkale/convert/ext/ByteBufferSimpledCoder.java index 1f72c00e0..99bb5b0ef 100644 --- a/src/org/redkale/convert/ext/ByteBufferSimpledCoder.java +++ b/src/org/redkale/convert/ext/ByteBufferSimpledCoder.java @@ -54,7 +54,7 @@ public final class ByteBufferSimpledCoder ex int size = 0; byte[] data = new byte[8]; int startPosition = in.position(); - while (in.hasNext(this, null, startPosition, contentLength)) { + while (in.hasNext(startPosition, contentLength)) { if (size >= data.length) { byte[] newdata = new byte[data.length + 4]; System.arraycopy(data, 0, newdata, 0, size); diff --git a/src/org/redkale/convert/ext/CharArraySimpledCoder.java b/src/org/redkale/convert/ext/CharArraySimpledCoder.java index f806b443f..5f738aa59 100644 --- a/src/org/redkale/convert/ext/CharArraySimpledCoder.java +++ b/src/org/redkale/convert/ext/CharArraySimpledCoder.java @@ -53,7 +53,7 @@ public final class CharArraySimpledCoder ext int size = 0; char[] data = new char[8]; int startPosition = in.position(); - while (in.hasNext(this, null, startPosition, contentLength)) { + while (in.hasNext(startPosition, contentLength)) { if (size >= data.length) { char[] newdata = new char[data.length + 4]; System.arraycopy(data, 0, newdata, 0, size); diff --git a/src/org/redkale/convert/ext/DoubleArraySimpledCoder.java b/src/org/redkale/convert/ext/DoubleArraySimpledCoder.java index 1e6fb0719..5b9f7cd0c 100644 --- a/src/org/redkale/convert/ext/DoubleArraySimpledCoder.java +++ b/src/org/redkale/convert/ext/DoubleArraySimpledCoder.java @@ -54,7 +54,7 @@ public final class DoubleArraySimpledCoder e int size = 0; double[] data = new double[8]; int startPosition = in.position(); - while (in.hasNext(this, null, startPosition, contentLength)) { + while (in.hasNext(startPosition, contentLength)) { if (size >= data.length) { double[] newdata = new double[data.length + 4]; System.arraycopy(data, 0, newdata, 0, size); diff --git a/src/org/redkale/convert/ext/FloatArraySimpledCoder.java b/src/org/redkale/convert/ext/FloatArraySimpledCoder.java index 97711e764..f1963c84d 100644 --- a/src/org/redkale/convert/ext/FloatArraySimpledCoder.java +++ b/src/org/redkale/convert/ext/FloatArraySimpledCoder.java @@ -53,7 +53,7 @@ public final class FloatArraySimpledCoder ex int size = 0; float[] data = new float[8]; int startPosition = in.position(); - while (in.hasNext(this, null, startPosition, contentLength)) { + while (in.hasNext(startPosition, contentLength)) { if (size >= data.length) { float[] newdata = new float[data.length + 4]; System.arraycopy(data, 0, newdata, 0, size); diff --git a/src/org/redkale/convert/ext/IntArraySimpledCoder.java b/src/org/redkale/convert/ext/IntArraySimpledCoder.java index dfd701a4e..c72cf841f 100644 --- a/src/org/redkale/convert/ext/IntArraySimpledCoder.java +++ b/src/org/redkale/convert/ext/IntArraySimpledCoder.java @@ -54,7 +54,7 @@ public final class IntArraySimpledCoder exte int size = 0; int[] data = new int[8]; int startPosition = in.position(); - while (in.hasNext(this, null, startPosition, contentLength)) { + while (in.hasNext(startPosition, contentLength)) { if (size >= data.length) { int[] newdata = new int[data.length + 4]; System.arraycopy(data, 0, newdata, 0, size); diff --git a/src/org/redkale/convert/ext/LongArraySimpledCoder.java b/src/org/redkale/convert/ext/LongArraySimpledCoder.java index 8196a9024..d5017ccca 100644 --- a/src/org/redkale/convert/ext/LongArraySimpledCoder.java +++ b/src/org/redkale/convert/ext/LongArraySimpledCoder.java @@ -54,7 +54,7 @@ public final class LongArraySimpledCoder ext int size = 0; long[] data = new long[8]; int startPosition = in.position(); - while (in.hasNext(this, null, startPosition, contentLength)) { + while (in.hasNext(startPosition, contentLength)) { if (size >= data.length) { long[] newdata = new long[data.length + 4]; System.arraycopy(data, 0, newdata, 0, size); diff --git a/src/org/redkale/convert/ext/ShortArraySimpledCoder.java b/src/org/redkale/convert/ext/ShortArraySimpledCoder.java index 74c9589f7..8b5b48079 100644 --- a/src/org/redkale/convert/ext/ShortArraySimpledCoder.java +++ b/src/org/redkale/convert/ext/ShortArraySimpledCoder.java @@ -53,7 +53,7 @@ public final class ShortArraySimpledCoder ex int size = 0; short[] data = new short[8]; int startPosition = in.position(); - while (in.hasNext(this, null, startPosition, contentLength)) { + while (in.hasNext(startPosition, contentLength)) { if (size >= data.length) { short[] newdata = new short[data.length + 4]; System.arraycopy(data, 0, newdata, 0, size); diff --git a/src/org/redkale/convert/ext/StringArraySimpledCoder.java b/src/org/redkale/convert/ext/StringArraySimpledCoder.java index 3b0c6cffc..aa109989d 100644 --- a/src/org/redkale/convert/ext/StringArraySimpledCoder.java +++ b/src/org/redkale/convert/ext/StringArraySimpledCoder.java @@ -55,7 +55,7 @@ public final class StringArraySimpledCoder e int size = 0; String[] data = new String[8]; int startPosition = in.position(); - while (in.hasNext(this, member, startPosition, contentLength)) { + while (in.hasNext(startPosition, contentLength)) { if (size >= data.length) { String[] newdata = new String[data.length + 4]; System.arraycopy(data, 0, newdata, 0, size); diff --git a/src/org/redkale/convert/json/JsonByteBufferReader.java b/src/org/redkale/convert/json/JsonByteBufferReader.java index b0b675423..1c1085b32 100644 --- a/src/org/redkale/convert/json/JsonByteBufferReader.java +++ b/src/org/redkale/convert/json/JsonByteBufferReader.java @@ -159,15 +159,13 @@ public class JsonByteBufferReader extends JsonReader { /** * 判断对象是否存在下一个属性或者数组是否存在下一个元素 * - * @param self Decodeable - * @param member DeMember * @param startPosition 起始位置 * @param contentLength 内容大小, 不确定的传-1 * * @return 是否存在 */ @Override - public boolean hasNext(Decodeable self, DeMember member, int startPosition, int contentLength) { + public boolean hasNext(int startPosition, int contentLength) { char ch = nextGoodChar(); if (ch == ',') return true; if (ch == '}' || ch == ']' || ch == 0) return false; diff --git a/src/org/redkale/convert/json/JsonReader.java b/src/org/redkale/convert/json/JsonReader.java index 6e7eef6ee..44c0d0da1 100644 --- a/src/org/redkale/convert/json/JsonReader.java +++ b/src/org/redkale/convert/json/JsonReader.java @@ -263,15 +263,13 @@ public class JsonReader extends Reader { /** * 判断对象是否存在下一个属性或者数组是否存在下一个元素 * - * @param self Decodeable - * @param member DeMember * @param startPosition 起始位置 * @param contentLength 内容大小, 不确定的传-1 * * @return 是否存在 */ @Override - public boolean hasNext(Decodeable self, DeMember member, int startPosition, int contentLength) { + public boolean hasNext(int startPosition, int contentLength) { char ch = this.text[++this.position]; if (ch == ',') return true; if (ch == '}' || ch == ']') return false; @@ -487,7 +485,7 @@ public class JsonReader extends Reader { int size = 0; byte[] data = new byte[8]; int startPosition = position(); - while (hasNext(null, null, startPosition, contentLength)) { + while (hasNext(startPosition, contentLength)) { if (size >= data.length) { byte[] newdata = new byte[data.length + 4]; System.arraycopy(data, 0, newdata, 0, size);