This commit is contained in:
Redkale
2018-07-20 09:04:05 +08:00
parent 03e9a5cbcb
commit 8baea2657d
18 changed files with 131 additions and 103 deletions

View File

@@ -42,16 +42,17 @@ public final class AnyEncoder<T> implements Encodeable<Writer, T> {
out.writeNull();
} else {
int count = values.length - values.length % 2;
out.writeMapB(count / 2, (Encodeable) this, (Encodeable) this, values);
for (int i = 0; i < count; i += 2) {
if (i > 0) out.writeArrayMark();
this.convertTo(out, (T) values[i]);
out.writeMapMark();
Object val = values[i + 1];
if (val instanceof CompletableFuture) {
this.convertTo(out, (T) ((CompletableFuture) val).join());
} else {
this.convertTo(out, (T) val);
if (out.writeMapB(count / 2, (Encodeable) this, (Encodeable) this, values) < 0) {
for (int i = 0; i < count; i += 2) {
if (i > 0) out.writeArrayMark();
this.convertTo(out, (T) values[i]);
out.writeMapMark();
Object val = values[i + 1];
if (val instanceof CompletableFuture) {
this.convertTo(out, (T) ((CompletableFuture) val).join());
} else {
this.convertTo(out, (T) val);
}
}
}
out.writeMapE();

View File

@@ -77,13 +77,14 @@ public final class ArrayEncoder<T> implements Encodeable<Writer, T[]> {
}
}
}
out.writeArrayB(value.length, encoder, value);
final Type comp = this.componentType;
boolean first = true;
for (Object v : value) {
if (!first) out.writeArrayMark();
((v != null && (v.getClass() == comp || out.specify() == comp)) ? encoder : anyEncoder).convertTo(out, v);
if (first) first = false;
if (out.writeArrayB(value.length, encoder, value) < 0) {
final Type comp = this.componentType;
boolean first = true;
for (Object v : value) {
if (!first) out.writeArrayMark();
((v != null && (v.getClass() == comp || out.specify() == comp)) ? encoder : anyEncoder).convertTo(out, v);
if (first) first = false;
}
}
out.writeArrayE();
}

View File

@@ -72,12 +72,13 @@ public final class CollectionEncoder<T> implements Encodeable<Writer, Collection
}
}
}
out.writeArrayB(value.size(), encoder, value);
boolean first = true;
for (Object v : value) {
if (!first) out.writeArrayMark();
encoder.convertTo(out, v);
if (first) first = false;
if (out.writeArrayB(value.size(), encoder, value) < 0) {
boolean first = true;
for (Object v : value) {
if (!first) out.writeArrayMark();
encoder.convertTo(out, v);
if (first) first = false;
}
}
out.writeArrayE();
}

View File

@@ -70,14 +70,15 @@ public final class MapEncoder<K, V> implements Encodeable<Writer, Map<K, V>> {
}
}
}
out.writeMapB(values.size(), (Encodeable) keyencoder, (Encodeable) valencoder, value);
boolean first = true;
for (Map.Entry<K, V> en : values.entrySet()) {
if (!first) out.writeArrayMark();
this.keyencoder.convertTo(out, en.getKey());
out.writeMapMark();
this.valencoder.convertTo(out, en.getValue());
if (first) first = false;
if (out.writeMapB(values.size(), (Encodeable) keyencoder, (Encodeable) valencoder, value) < 0) {
boolean first = true;
for (Map.Entry<K, V> en : values.entrySet()) {
if (!first) out.writeArrayMark();
this.keyencoder.convertTo(out, en.getKey());
out.writeMapMark();
this.valencoder.convertTo(out, en.getValue());
if (first) first = false;
}
}
out.writeMapE();
}

View File

@@ -145,9 +145,10 @@ public final class ObjectEncoder<W extends Writer, T> implements Encodeable<W, T
factory.loadEncoder(clz).convertTo(out, value);
return;
}
out.writeObjectB(value);
for (EnMember member : members) {
out.writeObjectField(member, value);
if (out.writeObjectB(value) < 0) {
for (EnMember member : members) {
out.writeObjectField(member, value);
}
}
out.writeObjectE(value);
}

View File

@@ -73,12 +73,13 @@ public final class StreamEncoder<T> implements Encodeable<Writer, Stream<T>> {
}
}
}
out.writeArrayB(array.length, encoder, array);
boolean first = true;
for (Object v : array) {
if (!first) out.writeArrayMark();
encoder.convertTo(out, v);
if (first) first = false;
if (out.writeArrayB(array.length, encoder, array) < 0) {
boolean first = true;
for (Object v : array) {
if (!first) out.writeArrayMark();
encoder.convertTo(out, v);
if (first) first = false;
}
}
out.writeArrayE();
}

View File

@@ -78,9 +78,12 @@ public abstract class Writer {
* 注: 覆盖此方法必须要先调用父方法 super.writeObjectB(obj);
*
* @param obj 写入的对象
*
* @return 返回-1表示还没有写入对象内容大于-1表示已写入对象内容返回对象内容大小
*/
public void writeObjectB(Object obj) {
public int writeObjectB(Object obj) {
this.comma = false;
return -1;
}
/**
@@ -129,8 +132,10 @@ public abstract class Writer {
* @param size 数组长度
* @param encoder Encodeable
* @param obj 对象
*
* @return 返回-1表示还没有写入对象内容大于-1表示已写入对象内容返回对象内容大小
*/
public abstract void writeArrayB(int size, Encodeable<Writer, Object> encoder, Object obj);
public abstract int writeArrayB(int size, Encodeable<Writer, Object> encoder, Object obj);
/**
* 输出数组元素间的间隔符
@@ -151,8 +156,10 @@ public abstract class Writer {
* @param keyEncoder Encodeable
* @param valueEncoder Encodeable
* @param obj 对象
*
* @return 返回-1表示还没有写入对象内容大于-1表示已写入对象内容返回对象内容大小
*/
public abstract void writeMapB(int size, Encodeable<Writer, Object> keyEncoder, Encodeable<Writer, Object> valueEncoder, Object obj);
public abstract int writeMapB(int size, Encodeable<Writer, Object> keyEncoder, Encodeable<Writer, Object> valueEncoder, Object obj);
/**
* 输出一个Map中key与value间的间隔符

View File

@@ -183,10 +183,11 @@ public class BsonWriter extends Writer {
}
@Override
public final void writeObjectB(Object obj) {
public final int writeObjectB(Object obj) {
super.writeObjectB(obj);
writeSmallString("");
writeShort(BsonReader.SIGN_OBJECTB);
return -1;
}
@Override
@@ -284,8 +285,9 @@ public class BsonWriter extends Writer {
}
@Override
public final void writeArrayB(int size, Encodeable<Writer, Object> encoder, Object obj) {
public final int writeArrayB(int size, Encodeable<Writer, Object> encoder, Object obj) {
writeInt(size);
return -1;
}
@Override
@@ -297,8 +299,9 @@ public class BsonWriter extends Writer {
}
@Override
public void writeMapB(int size, Encodeable<Writer, Object> keyEncoder, Encodeable<Writer, Object> valueEncoder, Object obj) {
public int writeMapB(int size, Encodeable<Writer, Object> keyEncoder, Encodeable<Writer, Object> valueEncoder, Object obj) {
writeArrayB(size, valueEncoder, obj);
return -1;
}
@Override

View File

@@ -29,12 +29,13 @@ public final class BoolArraySimpledCoder<R extends Reader, W extends Writer> ext
out.writeNull();
return;
}
out.writeArrayB(values.length, BoolSimpledCoder.instance, values);
boolean flag = false;
for (boolean v : values) {
if (flag) out.writeArrayMark();
out.writeBoolean(v);
flag = true;
if (out.writeArrayB(values.length, BoolSimpledCoder.instance, values) < 0) {
boolean flag = false;
for (boolean v : values) {
if (flag) out.writeArrayMark();
out.writeBoolean(v);
flag = true;
}
}
out.writeArrayE();
}

View File

@@ -30,12 +30,13 @@ public final class ByteBufferSimpledCoder<R extends Reader, W extends Writer> ex
out.writeNull();
return;
}
out.writeArrayB(value.remaining(), ByteSimpledCoder.instance, value);
boolean flag = false;
for (byte v : value.array()) {
if (flag) out.writeArrayMark();
out.writeByte(v);
flag = true;
if (out.writeArrayB(value.remaining(), ByteSimpledCoder.instance, value) < 0) {
boolean flag = false;
for (byte v : value.array()) {
if (flag) out.writeArrayMark();
out.writeByte(v);
flag = true;
}
}
out.writeArrayE();
}

View File

@@ -29,12 +29,13 @@ public final class CharArraySimpledCoder<R extends Reader, W extends Writer> ext
out.writeNull();
return;
}
out.writeArrayB(values.length, CharSimpledCoder.instance, values);
boolean flag = false;
for (char v : values) {
if (flag) out.writeArrayMark();
out.writeChar(v);
flag = true;
if (out.writeArrayB(values.length, CharSimpledCoder.instance, values) < 0) {
boolean flag = false;
for (char v : values) {
if (flag) out.writeArrayMark();
out.writeChar(v);
flag = true;
}
}
out.writeArrayE();
}

View File

@@ -30,12 +30,13 @@ public final class DoubleArraySimpledCoder<R extends Reader, W extends Writer> e
out.writeNull();
return;
}
out.writeArrayB(values.length, DoubleSimpledCoder.instance, values);
boolean flag = false;
for (double v : values) {
if (flag) out.writeArrayMark();
out.writeDouble(v);
flag = true;
if (out.writeArrayB(values.length, DoubleSimpledCoder.instance, values) < 0) {
boolean flag = false;
for (double v : values) {
if (flag) out.writeArrayMark();
out.writeDouble(v);
flag = true;
}
}
out.writeArrayE();
}

View File

@@ -29,12 +29,13 @@ public final class FloatArraySimpledCoder<R extends Reader, W extends Writer> ex
out.writeNull();
return;
}
out.writeArrayB(values.length, FloatSimpledCoder.instance, values);
boolean flag = false;
for (float v : values) {
if (flag) out.writeArrayMark();
out.writeFloat(v);
flag = true;
if (out.writeArrayB(values.length, FloatSimpledCoder.instance, values) < 0) {
boolean flag = false;
for (float v : values) {
if (flag) out.writeArrayMark();
out.writeFloat(v);
flag = true;
}
}
out.writeArrayE();
}

View File

@@ -30,12 +30,13 @@ public final class IntArraySimpledCoder<R extends Reader, W extends Writer> exte
out.writeNull();
return;
}
out.writeArrayB(values.length, IntSimpledCoder.instance, values);
boolean flag = false;
for (int v : values) {
if (flag) out.writeArrayMark();
out.writeInt(v);
flag = true;
if (out.writeArrayB(values.length, IntSimpledCoder.instance, values) < 0) {
boolean flag = false;
for (int v : values) {
if (flag) out.writeArrayMark();
out.writeInt(v);
flag = true;
}
}
out.writeArrayE();
}

View File

@@ -30,12 +30,13 @@ public final class LongArraySimpledCoder<R extends Reader, W extends Writer> ext
out.writeNull();
return;
}
out.writeArrayB(values.length, LongSimpledCoder.instance, values);
boolean flag = false;
for (long v : values) {
if (flag) out.writeArrayMark();
out.writeLong(v);
flag = true;
if (out.writeArrayB(values.length, LongSimpledCoder.instance, values) < 0) {
boolean flag = false;
for (long v : values) {
if (flag) out.writeArrayMark();
out.writeLong(v);
flag = true;
}
}
out.writeArrayE();
}

View File

@@ -29,12 +29,13 @@ public final class ShortArraySimpledCoder<R extends Reader, W extends Writer> ex
out.writeNull();
return;
}
out.writeArrayB(values.length, ShortSimpledCoder.instance, values);
boolean flag = false;
for (short v : values) {
if (flag) out.writeArrayMark();
out.writeShort(v);
flag = true;
if (out.writeArrayB(values.length, ShortSimpledCoder.instance, values) < 0) {
boolean flag = false;
for (short v : values) {
if (flag) out.writeArrayMark();
out.writeShort(v);
flag = true;
}
}
out.writeArrayE();
}

View File

@@ -29,12 +29,13 @@ public final class StringArraySimpledCoder<R extends Reader, W extends Writer> e
out.writeNull();
return;
}
out.writeArrayB(values.length, StringSimpledCoder.instance, values);
boolean flag = false;
for (String v : values) {
if (flag) out.writeArrayMark();
out.writeString(v);
flag = true;
if (out.writeArrayB(values.length, StringSimpledCoder.instance, values) < 0) {
boolean flag = false;
for (String v : values) {
if (flag) out.writeArrayMark();
out.writeString(v);
flag = true;
}
}
out.writeArrayE();
}

View File

@@ -329,9 +329,10 @@ public class JsonWriter extends Writer {
}
@Override
public final void writeObjectB(Object obj) {
public final int writeObjectB(Object obj) {
super.writeObjectB(obj);
writeTo('{');
return -1;
}
@Override
@@ -345,8 +346,9 @@ public class JsonWriter extends Writer {
}
@Override
public final void writeArrayB(int size, Encodeable<Writer, Object> encoder, Object obj) {
public final int writeArrayB(int size, Encodeable<Writer, Object> encoder, Object obj) {
writeTo('[');
return -1;
}
@Override
@@ -360,8 +362,9 @@ public class JsonWriter extends Writer {
}
@Override
public final void writeMapB(int size, Encodeable<Writer, Object> keyEncoder, Encodeable<Writer, Object> valueEncoder, Object obj) {
public final int writeMapB(int size, Encodeable<Writer, Object> keyEncoder, Encodeable<Writer, Object> valueEncoder, Object obj) {
writeTo('{');
return -1;
}
@Override