diff --git a/src/org/redkale/convert/ArrayDecoder.java b/src/org/redkale/convert/ArrayDecoder.java index e274ef193..243dff187 100644 --- a/src/org/redkale/convert/ArrayDecoder.java +++ b/src/org/redkale/convert/ArrayDecoder.java @@ -70,7 +70,7 @@ public class ArrayDecoder implements Decodeable { int contentLength = -1; if (len == Reader.SIGN_NULL) return null; if (len == Reader.SIGN_NOLENBUTBYTES) { - contentLength = in.readMemberContentLength(member); + contentLength = in.readMemberContentLength(member, decoder); len = Reader.SIGN_NOLENGTH; } if (this.decoder == null) { @@ -89,7 +89,7 @@ public class ArrayDecoder implements Decodeable { boolean first = true; if (len == Reader.SIGN_NOLENGTH) { int startPosition = in.position(); - while (in.hasNext(startPosition, contentLength)) { + while (in.hasNext(member, startPosition, contentLength)) { result.add(readMemberValue(in, member, first)); first = false; } diff --git a/src/org/redkale/convert/CollectionDecoder.java b/src/org/redkale/convert/CollectionDecoder.java index b42e4fe0f..090c8a561 100644 --- a/src/org/redkale/convert/CollectionDecoder.java +++ b/src/org/redkale/convert/CollectionDecoder.java @@ -70,7 +70,7 @@ public class CollectionDecoder implements Decodeable> { int contentLength = -1; if (len == Reader.SIGN_NULL) return null; if (len == Reader.SIGN_NOLENBUTBYTES) { - contentLength = in.readMemberContentLength(member); + contentLength = in.readMemberContentLength(member, decoder); len = Reader.SIGN_NOLENGTH; } if (this.decoder == null) { @@ -89,7 +89,7 @@ public class CollectionDecoder implements Decodeable> { boolean first = true; if (len == Reader.SIGN_NOLENGTH) { int startPosition = in.position(); - while (in.hasNext(startPosition, contentLength)) { + while (in.hasNext(member, startPosition, contentLength)) { result.add(readMemberValue(in, member, first)); first = false; } diff --git a/src/org/redkale/convert/MapDecoder.java b/src/org/redkale/convert/MapDecoder.java index 14df1dc50..87a1dfe6b 100644 --- a/src/org/redkale/convert/MapDecoder.java +++ b/src/org/redkale/convert/MapDecoder.java @@ -95,14 +95,14 @@ public class MapDecoder implements Decodeable> { int contentLength = -1; if (len == Reader.SIGN_NULL) return null; if (len == Reader.SIGN_NOLENBUTBYTES) { - contentLength = in.readMemberContentLength(member); + contentLength = in.readMemberContentLength(member, null); len = Reader.SIGN_NOLENGTH; } final Map result = this.creator.create(); boolean first = true; if (len == Reader.SIGN_NOLENGTH) { int startPosition = in.position(); - while (in.hasNext(startPosition, contentLength)) { + while (in.hasNext(member, startPosition, contentLength)) { Reader entryReader = getMapEntryReader(in, member, first); K key = readKeyMember(entryReader, member, first); entryReader.readBlank(); diff --git a/src/org/redkale/convert/Reader.java b/src/org/redkale/convert/Reader.java index 6e40d3209..faf957029 100644 --- a/src/org/redkale/convert/Reader.java +++ b/src/org/redkale/convert/Reader.java @@ -28,12 +28,13 @@ public abstract class Reader { * 是否还存在下个元素或字段
* 注意: 主要用于Array、Collection、Stream或Map等集合对象 * + * @param member DeMember * @param startPosition 起始位置 * @param contentLength 内容大小, 不确定的传-1 * * @return 是否还存在下个元素或字段 */ - public abstract boolean hasNext(int startPosition, int contentLength); + public abstract boolean hasNext(DeMember member, int startPosition, int contentLength); /** * 是否还存在下个元素或字段 @@ -42,7 +43,7 @@ public abstract class Reader { * @return 是否还存在下个元素或字段 */ public boolean hasNext() { - return hasNext(-1, -1); + return hasNext(null, -1, -1); } /** @@ -56,11 +57,12 @@ public abstract class Reader { * 读取字段值内容的字节数
* 只有在readXXXB方法返回SIGN_NOLENBUTBYTES值才会调用此方法 * - * @param member DeMember + * @param member DeMember + * @param decoder Decodeable * * @return 内容大小, 不确定返回-1 */ - public abstract int readMemberContentLength(DeMember member); + public abstract int readMemberContentLength(DeMember member, Decodeable decoder); /** * 跳过值(不包含值前面的字段) diff --git a/src/org/redkale/convert/StreamDecoder.java b/src/org/redkale/convert/StreamDecoder.java index d84190e21..295f37dfa 100644 --- a/src/org/redkale/convert/StreamDecoder.java +++ b/src/org/redkale/convert/StreamDecoder.java @@ -66,7 +66,7 @@ public class StreamDecoder implements Decodeable> { int contentLength = -1; if (len == Reader.SIGN_NULL) return null; if (len == Reader.SIGN_NOLENBUTBYTES) { - contentLength = in.readMemberContentLength(member); + contentLength = in.readMemberContentLength(member, this.decoder); len = Reader.SIGN_NOLENGTH; } if (this.decoder == null) { @@ -85,7 +85,7 @@ public class StreamDecoder implements Decodeable> { boolean first = true; if (len == Reader.SIGN_NOLENGTH) { int startPosition = in.position(); - while (in.hasNext(startPosition, contentLength)) { + while (in.hasNext(member, startPosition, contentLength)) { result.add(readMemberValue(in, member, first)); first = false; } diff --git a/src/org/redkale/convert/bson/BsonReader.java b/src/org/redkale/convert/bson/BsonReader.java index de14e7ce7..2b1d59902 100644 --- a/src/org/redkale/convert/bson/BsonReader.java +++ b/src/org/redkale/convert/bson/BsonReader.java @@ -208,7 +208,7 @@ public class BsonReader extends Reader { } @Override - public int readMemberContentLength(DeMember member) { + public int readMemberContentLength(DeMember member, Decodeable decoder) { return -1; } @@ -221,7 +221,7 @@ public class BsonReader extends Reader { * @return 是否存在 */ @Override - public boolean hasNext(int startPosition, int contentLength) { + public boolean hasNext(DeMember member, 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) @@ -267,14 +267,14 @@ public class BsonReader extends Reader { int contentLength = -1; if (len == Reader.SIGN_NULL) return null; if (len == Reader.SIGN_NOLENBUTBYTES) { - contentLength = readMemberContentLength(null); + contentLength = readMemberContentLength(null, null); len = Reader.SIGN_NOLENGTH; } if (len == Reader.SIGN_NOLENGTH) { int size = 0; byte[] data = new byte[8]; int startPosition = position(); - while (hasNext(startPosition, contentLength)) { + while (hasNext(null, 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 dc05864a9..616ba7fcc 100644 --- a/src/org/redkale/convert/ext/BoolArraySimpledCoder.java +++ b/src/org/redkale/convert/ext/BoolArraySimpledCoder.java @@ -46,14 +46,14 @@ public final class BoolArraySimpledCoder ext int contentLength = -1; if (len == Reader.SIGN_NULL) return null; if (len == Reader.SIGN_NOLENBUTBYTES) { - contentLength = in.readMemberContentLength(null); + contentLength = in.readMemberContentLength(null, BoolSimpledCoder.instance); len = Reader.SIGN_NOLENGTH; } if (len == Reader.SIGN_NOLENGTH) { int size = 0; boolean[] data = new boolean[8]; int startPosition = in.position(); - while (in.hasNext(startPosition, contentLength)) { + while (in.hasNext(null, 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 54781e025..e89b5394d 100644 --- a/src/org/redkale/convert/ext/ByteBufferSimpledCoder.java +++ b/src/org/redkale/convert/ext/ByteBufferSimpledCoder.java @@ -47,14 +47,14 @@ public final class ByteBufferSimpledCoder ex int contentLength = -1; if (len == Reader.SIGN_NULL) return null; if (len == Reader.SIGN_NOLENBUTBYTES) { - contentLength = in.readMemberContentLength(null); + contentLength = in.readMemberContentLength(null, ByteSimpledCoder.instance); len = Reader.SIGN_NOLENGTH; } if (len == Reader.SIGN_NOLENGTH) { int size = 0; byte[] data = new byte[8]; int startPosition = in.position(); - while (in.hasNext(startPosition, contentLength)) { + while (in.hasNext(null, 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 3e0a07416..c7289a7c8 100644 --- a/src/org/redkale/convert/ext/CharArraySimpledCoder.java +++ b/src/org/redkale/convert/ext/CharArraySimpledCoder.java @@ -46,14 +46,14 @@ public final class CharArraySimpledCoder ext int contentLength = -1; if (len == Reader.SIGN_NULL) return null; if (len == Reader.SIGN_NOLENBUTBYTES) { - contentLength = in.readMemberContentLength(null); + contentLength = in.readMemberContentLength(null, CharSimpledCoder.instance); len = Reader.SIGN_NOLENGTH; } if (len == Reader.SIGN_NOLENGTH) { int size = 0; char[] data = new char[8]; int startPosition = in.position(); - while (in.hasNext(startPosition, contentLength)) { + while (in.hasNext(null, 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 b62894877..4e826dc9a 100644 --- a/src/org/redkale/convert/ext/DoubleArraySimpledCoder.java +++ b/src/org/redkale/convert/ext/DoubleArraySimpledCoder.java @@ -47,14 +47,14 @@ public final class DoubleArraySimpledCoder e int contentLength = -1; if (len == Reader.SIGN_NULL) return null; if (len == Reader.SIGN_NOLENBUTBYTES) { - contentLength = in.readMemberContentLength(null); + contentLength = in.readMemberContentLength(null, DoubleSimpledCoder.instance); len = Reader.SIGN_NOLENGTH; } if (len == Reader.SIGN_NOLENGTH) { int size = 0; double[] data = new double[8]; int startPosition = in.position(); - while (in.hasNext(startPosition, contentLength)) { + while (in.hasNext(null, 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 960c52548..b8de258fb 100644 --- a/src/org/redkale/convert/ext/FloatArraySimpledCoder.java +++ b/src/org/redkale/convert/ext/FloatArraySimpledCoder.java @@ -46,14 +46,14 @@ public final class FloatArraySimpledCoder ex int contentLength = -1; if (len == Reader.SIGN_NULL) return null; if (len == Reader.SIGN_NOLENBUTBYTES) { - contentLength = in.readMemberContentLength(null); + contentLength = in.readMemberContentLength(null, FloatSimpledCoder.instance); len = Reader.SIGN_NOLENGTH; } if (len == Reader.SIGN_NOLENGTH) { int size = 0; float[] data = new float[8]; int startPosition = in.position(); - while (in.hasNext(startPosition, contentLength)) { + while (in.hasNext(null, 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 f931840e8..96263ce23 100644 --- a/src/org/redkale/convert/ext/IntArraySimpledCoder.java +++ b/src/org/redkale/convert/ext/IntArraySimpledCoder.java @@ -47,14 +47,14 @@ public final class IntArraySimpledCoder exte int contentLength = -1; if (len == Reader.SIGN_NULL) return null; if (len == Reader.SIGN_NOLENBUTBYTES) { - contentLength = in.readMemberContentLength(null); + contentLength = in.readMemberContentLength(null, IntSimpledCoder.instance); len = Reader.SIGN_NOLENGTH; } if (len == Reader.SIGN_NOLENGTH) { int size = 0; int[] data = new int[8]; int startPosition = in.position(); - while (in.hasNext(startPosition, contentLength)) { + while (in.hasNext(null, 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 5c931496e..834c8955b 100644 --- a/src/org/redkale/convert/ext/LongArraySimpledCoder.java +++ b/src/org/redkale/convert/ext/LongArraySimpledCoder.java @@ -47,14 +47,14 @@ public final class LongArraySimpledCoder ext int contentLength = -1; if (len == Reader.SIGN_NULL) return null; if (len == Reader.SIGN_NOLENBUTBYTES) { - contentLength = in.readMemberContentLength(null); + contentLength = in.readMemberContentLength(null, LongSimpledCoder.instance); len = Reader.SIGN_NOLENGTH; } if (len == Reader.SIGN_NOLENGTH) { int size = 0; long[] data = new long[8]; int startPosition = in.position(); - while (in.hasNext(startPosition, contentLength)) { + while (in.hasNext(null, 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 f3562c361..5494fb90f 100644 --- a/src/org/redkale/convert/ext/ShortArraySimpledCoder.java +++ b/src/org/redkale/convert/ext/ShortArraySimpledCoder.java @@ -46,14 +46,14 @@ public final class ShortArraySimpledCoder ex int contentLength = -1; if (len == Reader.SIGN_NULL) return null; if (len == Reader.SIGN_NOLENBUTBYTES) { - contentLength = in.readMemberContentLength(null); + contentLength = in.readMemberContentLength(null, ShortSimpledCoder.instance); len = Reader.SIGN_NOLENGTH; } if (len == Reader.SIGN_NOLENGTH) { int size = 0; short[] data = new short[8]; int startPosition = in.position(); - while (in.hasNext(startPosition, contentLength)) { + while (in.hasNext(null, 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 1894b76e1..d83fed70e 100644 --- a/src/org/redkale/convert/ext/StringArraySimpledCoder.java +++ b/src/org/redkale/convert/ext/StringArraySimpledCoder.java @@ -48,14 +48,14 @@ public final class StringArraySimpledCoder e int contentLength = -1; if (len == Reader.SIGN_NULL) return null; if (len == Reader.SIGN_NOLENBUTBYTES) { - contentLength = in.readMemberContentLength(null); + contentLength = in.readMemberContentLength(null, StringSimpledCoder.instance); len = Reader.SIGN_NOLENGTH; } if (len == Reader.SIGN_NOLENGTH) { int size = 0; String[] data = new String[8]; int startPosition = in.position(); - while (in.hasNext(startPosition, contentLength)) { + while (in.hasNext(member, 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 1c1085b32..2f1466a86 100644 --- a/src/org/redkale/convert/json/JsonByteBufferReader.java +++ b/src/org/redkale/convert/json/JsonByteBufferReader.java @@ -159,13 +159,14 @@ public class JsonByteBufferReader extends JsonReader { /** * 判断对象是否存在下一个属性或者数组是否存在下一个元素 * + * @param member DeMember * @param startPosition 起始位置 * @param contentLength 内容大小, 不确定的传-1 * * @return 是否存在 */ @Override - public boolean hasNext(int startPosition, int contentLength) { + public boolean hasNext(DeMember member, 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 c6808d677..1cbe2fb06 100644 --- a/src/org/redkale/convert/json/JsonReader.java +++ b/src/org/redkale/convert/json/JsonReader.java @@ -256,7 +256,7 @@ public class JsonReader extends Reader { } @Override - public int readMemberContentLength(DeMember member) { + public int readMemberContentLength(DeMember member, Decodeable decoder) { return -1; } @@ -269,7 +269,7 @@ public class JsonReader extends Reader { * @return 是否存在 */ @Override - public boolean hasNext(int startPosition, int contentLength) { + public boolean hasNext(DeMember member, int startPosition, int contentLength) { char ch = this.text[++this.position]; if (ch == ',') return true; if (ch == '}' || ch == ']') return false; @@ -478,14 +478,14 @@ public class JsonReader extends Reader { int contentLength = -1; if (len == Reader.SIGN_NULL) return null; if (len == Reader.SIGN_NOLENBUTBYTES) { - contentLength = readMemberContentLength(null); + contentLength = readMemberContentLength(null, null); len = Reader.SIGN_NOLENGTH; } if (len == Reader.SIGN_NOLENGTH) { int size = 0; byte[] data = new byte[8]; int startPosition = position(); - while (hasNext(startPosition, contentLength)) { + while (hasNext(null, startPosition, contentLength)) { if (size >= data.length) { byte[] newdata = new byte[data.length + 4]; System.arraycopy(data, 0, newdata, 0, size);