This commit is contained in:
Redkale
2018-07-22 18:37:07 +08:00
parent 1dbe125e27
commit 8ff2b60ed4
16 changed files with 26 additions and 21 deletions

View File

@@ -70,7 +70,7 @@ public class ArrayDecoder<T> implements Decodeable<Reader, T[]> {
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<T> implements Decodeable<Reader, T[]> {
}
final Decodeable<Reader, T> localdecoder = this.decoder;
final List<T> 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<T> implements Decodeable<Reader, T[]> {
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

View File

@@ -70,7 +70,7 @@ public class CollectionDecoder<T> implements Decodeable<Reader, Collection<T>> {
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) {

View File

@@ -95,7 +95,7 @@ public class MapDecoder<K, V> implements Decodeable<Reader, Map<K, V>> {
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<K, V> result = this.creator.create();

View File

@@ -56,9 +56,11 @@ public abstract class Reader {
* 读取字段值内容的字节数 <br>
* 只有在readXXXB方法返回SIGN_NOLENBUTBYTES值才会调用此方法
*
* @param member DeMember
*
* @return 内容大小, 不确定返回-1
*/
public abstract int readMemberContentLength();
public abstract int readMemberContentLength(DeMember member);
/**
* 跳过值(不包含值前面的字段)

View File

@@ -66,7 +66,7 @@ public class StreamDecoder<T> implements Decodeable<Reader, Stream<T>> {
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) {

View File

@@ -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) {

View File

@@ -46,7 +46,7 @@ public final class BoolArraySimpledCoder<R extends Reader, W extends Writer> 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) {

View File

@@ -47,7 +47,7 @@ public final class ByteBufferSimpledCoder<R extends Reader, W extends Writer> 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) {

View File

@@ -46,7 +46,7 @@ public final class CharArraySimpledCoder<R extends Reader, W extends Writer> 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) {

View File

@@ -47,7 +47,7 @@ public final class DoubleArraySimpledCoder<R extends Reader, W extends Writer> 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) {

View File

@@ -46,7 +46,7 @@ public final class FloatArraySimpledCoder<R extends Reader, W extends Writer> 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) {

View File

@@ -47,7 +47,7 @@ public final class IntArraySimpledCoder<R extends Reader, W extends Writer> 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) {

View File

@@ -47,7 +47,7 @@ public final class LongArraySimpledCoder<R extends Reader, W extends Writer> 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) {

View File

@@ -46,7 +46,7 @@ public final class ShortArraySimpledCoder<R extends Reader, W extends Writer> 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) {

View File

@@ -46,7 +46,7 @@ public final class StringArraySimpledCoder<R extends Reader, W extends Writer> 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) {

View File

@@ -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) {