From 8ff2b60ed4a04676bbef87adeea3ba70c7d50efa Mon Sep 17 00:00:00 2001 From: Redkale <8730487+redkale@users.noreply.github.com> Date: Sun, 22 Jul 2018 18:37:07 +0800 Subject: [PATCH] --- src/org/redkale/convert/ArrayDecoder.java | 11 +++++++---- src/org/redkale/convert/CollectionDecoder.java | 2 +- src/org/redkale/convert/MapDecoder.java | 2 +- src/org/redkale/convert/Reader.java | 4 +++- src/org/redkale/convert/StreamDecoder.java | 2 +- src/org/redkale/convert/bson/BsonReader.java | 4 ++-- .../redkale/convert/ext/BoolArraySimpledCoder.java | 2 +- .../redkale/convert/ext/ByteBufferSimpledCoder.java | 2 +- .../redkale/convert/ext/CharArraySimpledCoder.java | 2 +- .../redkale/convert/ext/DoubleArraySimpledCoder.java | 2 +- .../redkale/convert/ext/FloatArraySimpledCoder.java | 2 +- src/org/redkale/convert/ext/IntArraySimpledCoder.java | 2 +- .../redkale/convert/ext/LongArraySimpledCoder.java | 2 +- .../redkale/convert/ext/ShortArraySimpledCoder.java | 2 +- .../redkale/convert/ext/StringArraySimpledCoder.java | 2 +- src/org/redkale/convert/json/JsonReader.java | 4 ++-- 16 files changed, 26 insertions(+), 21 deletions(-) diff --git a/src/org/redkale/convert/ArrayDecoder.java b/src/org/redkale/convert/ArrayDecoder.java index 7df587e5a..1e5c6f9cd 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(); + contentLength = in.readMemberContentLength(member); len = Reader.SIGN_NOLENGTH; } if (this.decoder == null) { @@ -86,15 +86,17 @@ public class ArrayDecoder implements Decodeable { } final Decodeable localdecoder = this.decoder; final List result = new ArrayList(); + boolean first = true; if (len == Reader.SIGN_NOLENGTH) { int startPosition = in.position(); while (in.hasNext(startPosition, contentLength)) { - readMember(in, member); - result.add(localdecoder.convertFrom(in)); + result.add(readMemberValue(in, member, first)); + first = false; } } else { for (int i = 0; i < len; i++) { result.add(localdecoder.convertFrom(in)); + first = false; } } in.readArrayE(); @@ -102,7 +104,8 @@ public class ArrayDecoder implements Decodeable { return result.toArray(rs); } - protected void readMember(Reader in, DeMember member) { + protected T readMemberValue(Reader in, DeMember member, boolean first) { + return this.decoder.convertFrom(in); } @Override diff --git a/src/org/redkale/convert/CollectionDecoder.java b/src/org/redkale/convert/CollectionDecoder.java index 0458d8ed7..4e3c0c456 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(); + contentLength = in.readMemberContentLength(member); len = Reader.SIGN_NOLENGTH; } if (this.decoder == null) { diff --git a/src/org/redkale/convert/MapDecoder.java b/src/org/redkale/convert/MapDecoder.java index c6e0886c5..b03812a4b 100644 --- a/src/org/redkale/convert/MapDecoder.java +++ b/src/org/redkale/convert/MapDecoder.java @@ -95,7 +95,7 @@ public class MapDecoder implements Decodeable> { int contentLength = -1; if (len == Reader.SIGN_NULL) return null; if (len == Reader.SIGN_NOLENBUTBYTES) { - contentLength = in.readMemberContentLength(); + contentLength = in.readMemberContentLength(member); len = Reader.SIGN_NOLENGTH; } final Map result = this.creator.create(); diff --git a/src/org/redkale/convert/Reader.java b/src/org/redkale/convert/Reader.java index 3f61f687b..5cef4c8be 100644 --- a/src/org/redkale/convert/Reader.java +++ b/src/org/redkale/convert/Reader.java @@ -56,9 +56,11 @@ public abstract class Reader { * 读取字段值内容的字节数
* 只有在readXXXB方法返回SIGN_NOLENBUTBYTES值才会调用此方法 * + * @param member DeMember + * * @return 内容大小, 不确定返回-1 */ - public abstract int readMemberContentLength(); + public abstract int readMemberContentLength(DeMember member); /** * 跳过值(不包含值前面的字段) diff --git a/src/org/redkale/convert/StreamDecoder.java b/src/org/redkale/convert/StreamDecoder.java index 7bf2781f8..f0ecf668f 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(); + contentLength = in.readMemberContentLength(member); len = Reader.SIGN_NOLENGTH; } if (this.decoder == null) { diff --git a/src/org/redkale/convert/bson/BsonReader.java b/src/org/redkale/convert/bson/BsonReader.java index 83a70e18c..a8f27b18a 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() { + public int readMemberContentLength(DeMember member) { return -1; } @@ -267,7 +267,7 @@ public class BsonReader extends Reader { int contentLength = -1; if (len == Reader.SIGN_NULL) return null; if (len == Reader.SIGN_NOLENBUTBYTES) { - contentLength = readMemberContentLength(); + contentLength = readMemberContentLength(null); len = Reader.SIGN_NOLENGTH; } if (len == Reader.SIGN_NOLENGTH) { diff --git a/src/org/redkale/convert/ext/BoolArraySimpledCoder.java b/src/org/redkale/convert/ext/BoolArraySimpledCoder.java index b19a209e4..006c53468 100644 --- a/src/org/redkale/convert/ext/BoolArraySimpledCoder.java +++ b/src/org/redkale/convert/ext/BoolArraySimpledCoder.java @@ -46,7 +46,7 @@ public final class BoolArraySimpledCoder ext int contentLength = -1; if (len == Reader.SIGN_NULL) return null; if (len == Reader.SIGN_NOLENBUTBYTES) { - contentLength = in.readMemberContentLength(); + contentLength = in.readMemberContentLength(null); len = Reader.SIGN_NOLENGTH; } if (len == Reader.SIGN_NOLENGTH) { diff --git a/src/org/redkale/convert/ext/ByteBufferSimpledCoder.java b/src/org/redkale/convert/ext/ByteBufferSimpledCoder.java index ef2ab98cf..c23ea0723 100644 --- a/src/org/redkale/convert/ext/ByteBufferSimpledCoder.java +++ b/src/org/redkale/convert/ext/ByteBufferSimpledCoder.java @@ -47,7 +47,7 @@ public final class ByteBufferSimpledCoder ex int contentLength = -1; if (len == Reader.SIGN_NULL) return null; if (len == Reader.SIGN_NOLENBUTBYTES) { - contentLength = in.readMemberContentLength(); + contentLength = in.readMemberContentLength(null); len = Reader.SIGN_NOLENGTH; } if (len == Reader.SIGN_NOLENGTH) { diff --git a/src/org/redkale/convert/ext/CharArraySimpledCoder.java b/src/org/redkale/convert/ext/CharArraySimpledCoder.java index aaf124d76..6596e9e97 100644 --- a/src/org/redkale/convert/ext/CharArraySimpledCoder.java +++ b/src/org/redkale/convert/ext/CharArraySimpledCoder.java @@ -46,7 +46,7 @@ public final class CharArraySimpledCoder ext int contentLength = -1; if (len == Reader.SIGN_NULL) return null; if (len == Reader.SIGN_NOLENBUTBYTES) { - contentLength = in.readMemberContentLength(); + contentLength = in.readMemberContentLength(null); len = Reader.SIGN_NOLENGTH; } if (len == Reader.SIGN_NOLENGTH) { diff --git a/src/org/redkale/convert/ext/DoubleArraySimpledCoder.java b/src/org/redkale/convert/ext/DoubleArraySimpledCoder.java index 278d2cc75..2cd0624f9 100644 --- a/src/org/redkale/convert/ext/DoubleArraySimpledCoder.java +++ b/src/org/redkale/convert/ext/DoubleArraySimpledCoder.java @@ -47,7 +47,7 @@ public final class DoubleArraySimpledCoder e int contentLength = -1; if (len == Reader.SIGN_NULL) return null; if (len == Reader.SIGN_NOLENBUTBYTES) { - contentLength = in.readMemberContentLength(); + contentLength = in.readMemberContentLength(null); len = Reader.SIGN_NOLENGTH; } if (len == Reader.SIGN_NOLENGTH) { diff --git a/src/org/redkale/convert/ext/FloatArraySimpledCoder.java b/src/org/redkale/convert/ext/FloatArraySimpledCoder.java index b86cd9895..d5b63c400 100644 --- a/src/org/redkale/convert/ext/FloatArraySimpledCoder.java +++ b/src/org/redkale/convert/ext/FloatArraySimpledCoder.java @@ -46,7 +46,7 @@ public final class FloatArraySimpledCoder ex int contentLength = -1; if (len == Reader.SIGN_NULL) return null; if (len == Reader.SIGN_NOLENBUTBYTES) { - contentLength = in.readMemberContentLength(); + contentLength = in.readMemberContentLength(null); len = Reader.SIGN_NOLENGTH; } if (len == Reader.SIGN_NOLENGTH) { diff --git a/src/org/redkale/convert/ext/IntArraySimpledCoder.java b/src/org/redkale/convert/ext/IntArraySimpledCoder.java index 0a411a43d..7c26ce59e 100644 --- a/src/org/redkale/convert/ext/IntArraySimpledCoder.java +++ b/src/org/redkale/convert/ext/IntArraySimpledCoder.java @@ -47,7 +47,7 @@ public final class IntArraySimpledCoder exte int contentLength = -1; if (len == Reader.SIGN_NULL) return null; if (len == Reader.SIGN_NOLENBUTBYTES) { - contentLength = in.readMemberContentLength(); + contentLength = in.readMemberContentLength(null); len = Reader.SIGN_NOLENGTH; } if (len == Reader.SIGN_NOLENGTH) { diff --git a/src/org/redkale/convert/ext/LongArraySimpledCoder.java b/src/org/redkale/convert/ext/LongArraySimpledCoder.java index 7f3738084..9daa5f041 100644 --- a/src/org/redkale/convert/ext/LongArraySimpledCoder.java +++ b/src/org/redkale/convert/ext/LongArraySimpledCoder.java @@ -47,7 +47,7 @@ public final class LongArraySimpledCoder ext int contentLength = -1; if (len == Reader.SIGN_NULL) return null; if (len == Reader.SIGN_NOLENBUTBYTES) { - contentLength = in.readMemberContentLength(); + contentLength = in.readMemberContentLength(null); len = Reader.SIGN_NOLENGTH; } if (len == Reader.SIGN_NOLENGTH) { diff --git a/src/org/redkale/convert/ext/ShortArraySimpledCoder.java b/src/org/redkale/convert/ext/ShortArraySimpledCoder.java index 19204c877..4301b625b 100644 --- a/src/org/redkale/convert/ext/ShortArraySimpledCoder.java +++ b/src/org/redkale/convert/ext/ShortArraySimpledCoder.java @@ -46,7 +46,7 @@ public final class ShortArraySimpledCoder ex int contentLength = -1; if (len == Reader.SIGN_NULL) return null; if (len == Reader.SIGN_NOLENBUTBYTES) { - contentLength = in.readMemberContentLength(); + contentLength = in.readMemberContentLength(null); len = Reader.SIGN_NOLENGTH; } if (len == Reader.SIGN_NOLENGTH) { diff --git a/src/org/redkale/convert/ext/StringArraySimpledCoder.java b/src/org/redkale/convert/ext/StringArraySimpledCoder.java index f66e79715..a96d200be 100644 --- a/src/org/redkale/convert/ext/StringArraySimpledCoder.java +++ b/src/org/redkale/convert/ext/StringArraySimpledCoder.java @@ -46,7 +46,7 @@ public final class StringArraySimpledCoder e int contentLength = -1; if (len == Reader.SIGN_NULL) return null; if (len == Reader.SIGN_NOLENBUTBYTES) { - contentLength = in.readMemberContentLength(); + contentLength = in.readMemberContentLength(null); len = Reader.SIGN_NOLENGTH; } if (len == Reader.SIGN_NOLENGTH) { diff --git a/src/org/redkale/convert/json/JsonReader.java b/src/org/redkale/convert/json/JsonReader.java index e367f0488..093b4cf9c 100644 --- a/src/org/redkale/convert/json/JsonReader.java +++ b/src/org/redkale/convert/json/JsonReader.java @@ -250,7 +250,7 @@ public class JsonReader extends Reader { } @Override - public int readMemberContentLength() { + public int readMemberContentLength(DeMember member) { return -1; } @@ -472,7 +472,7 @@ public class JsonReader extends Reader { int contentLength = -1; if (len == Reader.SIGN_NULL) return null; if (len == Reader.SIGN_NOLENBUTBYTES) { - contentLength = readMemberContentLength(); + contentLength = readMemberContentLength(null); len = Reader.SIGN_NOLENGTH; } if (len == Reader.SIGN_NOLENGTH) {