This commit is contained in:
Redkale
2018-07-23 10:06:36 +08:00
parent d3cfe809e7
commit 69a0071e17
18 changed files with 37 additions and 30 deletions

View File

@@ -66,7 +66,7 @@ public class ArrayDecoder<T> implements Decodeable<Reader, T[]> {
} }
public T[] convertFrom(Reader in, DeMember member) { public T[] convertFrom(Reader in, DeMember member) {
int len = in.readArrayB(member); int len = in.readArrayB(member, decoder);
int contentLength = -1; int contentLength = -1;
if (len == Reader.SIGN_NULL) return null; if (len == Reader.SIGN_NULL) return null;
if (len == Reader.SIGN_NOLENBUTBYTES) { if (len == Reader.SIGN_NOLENBUTBYTES) {

View File

@@ -66,7 +66,7 @@ public class CollectionDecoder<T> implements Decodeable<Reader, Collection<T>> {
} }
public Collection<T> convertFrom(Reader in, DeMember member) { public Collection<T> convertFrom(Reader in, DeMember member) {
int len = in.readArrayB(member); int len = in.readArrayB(member, decoder);
int contentLength = -1; int contentLength = -1;
if (len == Reader.SIGN_NULL) return null; if (len == Reader.SIGN_NULL) return null;
if (len == Reader.SIGN_NOLENBUTBYTES) { if (len == Reader.SIGN_NOLENBUTBYTES) {

View File

@@ -91,7 +91,7 @@ public class MapDecoder<K, V> implements Decodeable<Reader, Map<K, V>> {
} }
} }
} }
int len = in.readMapB(member); int len = in.readMapB(member, this.keyDecoder);
int contentLength = -1; int contentLength = -1;
if (len == Reader.SIGN_NULL) return null; if (len == Reader.SIGN_NULL) return null;
if (len == Reader.SIGN_NOLENBUTBYTES) { if (len == Reader.SIGN_NOLENBUTBYTES) {

View File

@@ -94,11 +94,12 @@ public abstract class Reader {
/** /**
* 读取数组的开头并返回数组的长度 * 读取数组的开头并返回数组的长度
* *
* @param member DeMember * @param member DeMember
* @param decoder Decodeable
* *
* @return 返回数组的长度 * @return 返回数组的长度
*/ */
public abstract int readArrayB(DeMember member); public abstract int readArrayB(DeMember member, Decodeable decoder);
/** /**
* 读取数组的尾端 * 读取数组的尾端
@@ -109,11 +110,12 @@ public abstract class Reader {
/** /**
* 读取map的开头并返回map的size * 读取map的开头并返回map的size
* *
* @param member DeMember * @param member DeMember
* @param keydecoder Decodeable
* *
* @return 返回map的size * @return 返回map的size
*/ */
public abstract int readMapB(DeMember member); public abstract int readMapB(DeMember member, Decodeable keydecoder);
/** /**
* 读取数组的尾端 * 读取数组的尾端

View File

@@ -62,7 +62,7 @@ public class StreamDecoder<T> implements Decodeable<Reader, Stream<T>> {
} }
public Stream<T> convertFrom(Reader in, DeMember member) { public Stream<T> convertFrom(Reader in, DeMember member) {
int len = in.readArrayB(member); int len = in.readArrayB(member, this.decoder);
int contentLength = -1; int contentLength = -1;
if (len == Reader.SIGN_NULL) return null; if (len == Reader.SIGN_NULL) return null;
if (len == Reader.SIGN_NOLENBUTBYTES) { if (len == Reader.SIGN_NOLENBUTBYTES) {

View File

@@ -51,10 +51,12 @@ public class BsonByteBufferReader extends BsonReader {
/** /**
* 判断下一个非空白字节是否为[ * 判断下一个非空白字节是否为[
* *
* @param member DeMember
* @param decoder Decodeable
* @return 数组长度或 SIGN_NULL * @return 数组长度或 SIGN_NULL
*/ */
@Override @Override
public final int readArrayB(DeMember member) { public final int readArrayB(DeMember member, Decodeable decoder) {
short bt = readShort(); short bt = readShort();
if (bt == Reader.SIGN_NULL) return bt; if (bt == Reader.SIGN_NULL) return bt;
short lt = readShort(); short lt = readShort();

View File

@@ -171,8 +171,8 @@ public class BsonReader extends Reader {
} }
@Override @Override
public final int readMapB(DeMember member) { public final int readMapB(DeMember member, Decodeable keydecoder) {
return readArrayB(member); return readArrayB(member, keydecoder);
} }
@Override @Override
@@ -185,7 +185,7 @@ public class BsonReader extends Reader {
* @return 数组长度或SIGN_NULL * @return 数组长度或SIGN_NULL
*/ */
@Override @Override
public int readArrayB(DeMember member) { public int readArrayB(DeMember member, Decodeable decoder) {
short bt = readShort(); short bt = readShort();
if (bt == Reader.SIGN_NULL) return bt; if (bt == Reader.SIGN_NULL) return bt;
return (bt & 0xffff) << 16 | ((content[++this.position] & 0xff) << 8) | (content[++this.position] & 0xff); return (bt & 0xffff) << 16 | ((content[++this.position] & 0xff) << 8) | (content[++this.position] & 0xff);
@@ -263,7 +263,7 @@ public class BsonReader extends Reader {
@Override @Override
public final byte[] readByteArray() { public final byte[] readByteArray() {
int len = readArrayB(null); int len = readArrayB(null, null);
int contentLength = -1; int contentLength = -1;
if (len == Reader.SIGN_NULL) return null; if (len == Reader.SIGN_NULL) return null;
if (len == Reader.SIGN_NOLENBUTBYTES) { if (len == Reader.SIGN_NOLENBUTBYTES) {

View File

@@ -42,7 +42,7 @@ public final class BoolArraySimpledCoder<R extends Reader, W extends Writer> ext
@Override @Override
public boolean[] convertFrom(R in) { public boolean[] convertFrom(R in) {
int len = in.readArrayB(null); int len = in.readArrayB(null, BoolSimpledCoder.instance);
int contentLength = -1; int contentLength = -1;
if (len == Reader.SIGN_NULL) return null; if (len == Reader.SIGN_NULL) return null;
if (len == Reader.SIGN_NOLENBUTBYTES) { if (len == Reader.SIGN_NOLENBUTBYTES) {

View File

@@ -43,7 +43,7 @@ public final class ByteBufferSimpledCoder<R extends Reader, W extends Writer> ex
@Override @Override
public ByteBuffer convertFrom(R in) { public ByteBuffer convertFrom(R in) {
int len = in.readArrayB(null); int len = in.readArrayB(null, ByteSimpledCoder.instance);
int contentLength = -1; int contentLength = -1;
if (len == Reader.SIGN_NULL) return null; if (len == Reader.SIGN_NULL) return null;
if (len == Reader.SIGN_NOLENBUTBYTES) { if (len == Reader.SIGN_NOLENBUTBYTES) {

View File

@@ -42,7 +42,7 @@ public final class CharArraySimpledCoder<R extends Reader, W extends Writer> ext
@Override @Override
public char[] convertFrom(R in) { public char[] convertFrom(R in) {
int len = in.readArrayB(null); int len = in.readArrayB(null, CharSimpledCoder.instance);
int contentLength = -1; int contentLength = -1;
if (len == Reader.SIGN_NULL) return null; if (len == Reader.SIGN_NULL) return null;
if (len == Reader.SIGN_NOLENBUTBYTES) { if (len == Reader.SIGN_NOLENBUTBYTES) {

View File

@@ -43,7 +43,7 @@ public final class DoubleArraySimpledCoder<R extends Reader, W extends Writer> e
@Override @Override
public double[] convertFrom(R in) { public double[] convertFrom(R in) {
int len = in.readArrayB(null); int len = in.readArrayB(null, DoubleSimpledCoder.instance);
int contentLength = -1; int contentLength = -1;
if (len == Reader.SIGN_NULL) return null; if (len == Reader.SIGN_NULL) return null;
if (len == Reader.SIGN_NOLENBUTBYTES) { if (len == Reader.SIGN_NOLENBUTBYTES) {

View File

@@ -42,7 +42,7 @@ public final class FloatArraySimpledCoder<R extends Reader, W extends Writer> ex
@Override @Override
public float[] convertFrom(R in) { public float[] convertFrom(R in) {
int len = in.readArrayB(null); int len = in.readArrayB(null, FloatSimpledCoder.instance);
int contentLength = -1; int contentLength = -1;
if (len == Reader.SIGN_NULL) return null; if (len == Reader.SIGN_NULL) return null;
if (len == Reader.SIGN_NOLENBUTBYTES) { if (len == Reader.SIGN_NOLENBUTBYTES) {

View File

@@ -43,7 +43,7 @@ public final class IntArraySimpledCoder<R extends Reader, W extends Writer> exte
@Override @Override
public int[] convertFrom(R in) { public int[] convertFrom(R in) {
int len = in.readArrayB(null); int len = in.readArrayB(null, IntSimpledCoder.instance);
int contentLength = -1; int contentLength = -1;
if (len == Reader.SIGN_NULL) return null; if (len == Reader.SIGN_NULL) return null;
if (len == Reader.SIGN_NOLENBUTBYTES) { if (len == Reader.SIGN_NOLENBUTBYTES) {

View File

@@ -43,7 +43,7 @@ public final class LongArraySimpledCoder<R extends Reader, W extends Writer> ext
@Override @Override
public long[] convertFrom(R in) { public long[] convertFrom(R in) {
int len = in.readArrayB(null); int len = in.readArrayB(null, LongSimpledCoder.instance);
int contentLength = -1; int contentLength = -1;
if (len == Reader.SIGN_NULL) return null; if (len == Reader.SIGN_NULL) return null;
if (len == Reader.SIGN_NOLENBUTBYTES) { if (len == Reader.SIGN_NOLENBUTBYTES) {

View File

@@ -42,7 +42,7 @@ public final class ShortArraySimpledCoder<R extends Reader, W extends Writer> ex
@Override @Override
public short[] convertFrom(R in) { public short[] convertFrom(R in) {
int len = in.readArrayB(null); int len = in.readArrayB(null, ShortSimpledCoder.instance);
int contentLength = -1; int contentLength = -1;
if (len == Reader.SIGN_NULL) return null; if (len == Reader.SIGN_NULL) return null;
if (len == Reader.SIGN_NOLENBUTBYTES) { if (len == Reader.SIGN_NOLENBUTBYTES) {

View File

@@ -44,7 +44,7 @@ public final class StringArraySimpledCoder<R extends Reader, W extends Writer> e
} }
public String[] convertFrom(R in, DeMember member) { public String[] convertFrom(R in, DeMember member) {
int len = in.readArrayB(member); int len = in.readArrayB(member, StringSimpledCoder.instance);
int contentLength = -1; int contentLength = -1;
if (len == Reader.SIGN_NULL) return null; if (len == Reader.SIGN_NULL) return null;
if (len == Reader.SIGN_NOLENBUTBYTES) { if (len == Reader.SIGN_NOLENBUTBYTES) {

View File

@@ -132,12 +132,13 @@ public class JsonByteBufferReader extends JsonReader {
/** /**
* 判断下一个非空白字符是否为[ * 判断下一个非空白字符是否为[
* *
* @param member DeMember * @param member DeMember
* @param decoder Decodeable
* *
* @return SIGN_NOLENGTH 或 SIGN_NULL * @return SIGN_NOLENGTH 或 SIGN_NULL
*/ */
@Override @Override
public final int readArrayB(DeMember member) { public final int readArrayB(DeMember member, Decodeable decoder) {
char ch = nextGoodChar(); char ch = nextGoodChar();
if (ch == '[' || ch == '{') return SIGN_NOLENGTH; if (ch == '[' || ch == '{') return SIGN_NOLENGTH;
if (ch == 'n' && nextChar() == 'u' && nextChar() == 'l' && nextChar() == 'l') return SIGN_NULL; if (ch == 'n' && nextChar() == 'u' && nextChar() == 'l' && nextChar() == 'l') return SIGN_NULL;

View File

@@ -189,13 +189,14 @@ public class JsonReader extends Reader {
/** /**
* 判断下一个非空白字符是否为{ * 判断下一个非空白字符是否为{
* *
* @param member DeMember * @param member DeMember
* @param keydecoder Decodeable
* *
* @return SIGN_NOLENGTH 或 SIGN_NULL * @return SIGN_NOLENGTH 或 SIGN_NULL
*/ */
@Override @Override
public final int readMapB(DeMember member) { public final int readMapB(DeMember member, Decodeable keydecoder) {
return readArrayB(member); return readArrayB(member, keydecoder);
} }
@Override @Override
@@ -205,12 +206,13 @@ public class JsonReader extends Reader {
/** /**
* 判断下一个非空白字符是否为[ * 判断下一个非空白字符是否为[
* *
* @param member DeMember * @param member DeMember
* @param decoder Decodeable
* *
* @return SIGN_NOLENGTH 或 SIGN_NULL * @return SIGN_NOLENGTH 或 SIGN_NULL
*/ */
@Override @Override
public int readArrayB(DeMember member) { public int readArrayB(DeMember member, Decodeable decoder) {
char ch = this.text[++this.position]; char ch = this.text[++this.position];
if (ch == '[') return SIGN_NOLENGTH; if (ch == '[') return SIGN_NOLENGTH;
if (ch == '{') return SIGN_NOLENGTH; if (ch == '{') return SIGN_NOLENGTH;
@@ -472,7 +474,7 @@ public class JsonReader extends Reader {
@Override @Override
public final byte[] readByteArray() { public final byte[] readByteArray() {
int len = readArrayB(null); int len = readArrayB(null, null);
int contentLength = -1; int contentLength = -1;
if (len == Reader.SIGN_NULL) return null; if (len == Reader.SIGN_NULL) return null;
if (len == Reader.SIGN_NOLENBUTBYTES) { if (len == Reader.SIGN_NOLENBUTBYTES) {