From 8baea2657d6f7466dc5cd03c364b9c3b7b07f47f Mon Sep 17 00:00:00 2001 From: Redkale <22250530@qq.com> Date: Fri, 20 Jul 2018 09:04:05 +0800 Subject: [PATCH] --- src/org/redkale/convert/AnyEncoder.java | 21 ++++++++++--------- src/org/redkale/convert/ArrayEncoder.java | 15 ++++++------- .../redkale/convert/CollectionEncoder.java | 13 ++++++------ src/org/redkale/convert/MapEncoder.java | 17 ++++++++------- src/org/redkale/convert/ObjectEncoder.java | 7 ++++--- src/org/redkale/convert/StreamEncoder.java | 13 ++++++------ src/org/redkale/convert/Writer.java | 13 +++++++++--- src/org/redkale/convert/bson/BsonWriter.java | 9 +++++--- .../convert/ext/BoolArraySimpledCoder.java | 13 ++++++------ .../convert/ext/ByteBufferSimpledCoder.java | 13 ++++++------ .../convert/ext/CharArraySimpledCoder.java | 13 ++++++------ .../convert/ext/DoubleArraySimpledCoder.java | 13 ++++++------ .../convert/ext/FloatArraySimpledCoder.java | 13 ++++++------ .../convert/ext/IntArraySimpledCoder.java | 13 ++++++------ .../convert/ext/LongArraySimpledCoder.java | 13 ++++++------ .../convert/ext/ShortArraySimpledCoder.java | 13 ++++++------ .../convert/ext/StringArraySimpledCoder.java | 13 ++++++------ src/org/redkale/convert/json/JsonWriter.java | 9 +++++--- 18 files changed, 131 insertions(+), 103 deletions(-) diff --git a/src/org/redkale/convert/AnyEncoder.java b/src/org/redkale/convert/AnyEncoder.java index 58f7f45e7..ab31b9a62 100644 --- a/src/org/redkale/convert/AnyEncoder.java +++ b/src/org/redkale/convert/AnyEncoder.java @@ -42,16 +42,17 @@ public final class AnyEncoder implements Encodeable { 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(); diff --git a/src/org/redkale/convert/ArrayEncoder.java b/src/org/redkale/convert/ArrayEncoder.java index 88496eff4..0b742e3b2 100644 --- a/src/org/redkale/convert/ArrayEncoder.java +++ b/src/org/redkale/convert/ArrayEncoder.java @@ -77,13 +77,14 @@ public final class ArrayEncoder implements Encodeable { } } } - 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(); } diff --git a/src/org/redkale/convert/CollectionEncoder.java b/src/org/redkale/convert/CollectionEncoder.java index 0ee374fe9..65a6fc14c 100644 --- a/src/org/redkale/convert/CollectionEncoder.java +++ b/src/org/redkale/convert/CollectionEncoder.java @@ -72,12 +72,13 @@ public final class CollectionEncoder implements Encodeable implements Encodeable> { } } } - out.writeMapB(values.size(), (Encodeable) keyencoder, (Encodeable) valencoder, value); - boolean first = true; - for (Map.Entry 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 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(); } diff --git a/src/org/redkale/convert/ObjectEncoder.java b/src/org/redkale/convert/ObjectEncoder.java index e1fd0c94b..5ed43606b 100644 --- a/src/org/redkale/convert/ObjectEncoder.java +++ b/src/org/redkale/convert/ObjectEncoder.java @@ -145,9 +145,10 @@ public final class ObjectEncoder implements Encodeable implements Encodeable> { } } } - 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(); } diff --git a/src/org/redkale/convert/Writer.java b/src/org/redkale/convert/Writer.java index 04a9e6528..2ad80b786 100644 --- a/src/org/redkale/convert/Writer.java +++ b/src/org/redkale/convert/Writer.java @@ -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 encoder, Object obj); + public abstract int writeArrayB(int size, Encodeable 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 keyEncoder, Encodeable valueEncoder, Object obj); + public abstract int writeMapB(int size, Encodeable keyEncoder, Encodeable valueEncoder, Object obj); /** * 输出一个Map中key与value间的间隔符 diff --git a/src/org/redkale/convert/bson/BsonWriter.java b/src/org/redkale/convert/bson/BsonWriter.java index e315b6c3b..47f064bdc 100644 --- a/src/org/redkale/convert/bson/BsonWriter.java +++ b/src/org/redkale/convert/bson/BsonWriter.java @@ -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 encoder, Object obj) { + public final int writeArrayB(int size, Encodeable encoder, Object obj) { writeInt(size); + return -1; } @Override @@ -297,8 +299,9 @@ public class BsonWriter extends Writer { } @Override - public void writeMapB(int size, Encodeable keyEncoder, Encodeable valueEncoder, Object obj) { + public int writeMapB(int size, Encodeable keyEncoder, Encodeable valueEncoder, Object obj) { writeArrayB(size, valueEncoder, obj); + return -1; } @Override diff --git a/src/org/redkale/convert/ext/BoolArraySimpledCoder.java b/src/org/redkale/convert/ext/BoolArraySimpledCoder.java index 99d8c7c40..b19a209e4 100644 --- a/src/org/redkale/convert/ext/BoolArraySimpledCoder.java +++ b/src/org/redkale/convert/ext/BoolArraySimpledCoder.java @@ -29,12 +29,13 @@ public final class BoolArraySimpledCoder 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(); } diff --git a/src/org/redkale/convert/ext/ByteBufferSimpledCoder.java b/src/org/redkale/convert/ext/ByteBufferSimpledCoder.java index 8717c7813..ef2ab98cf 100644 --- a/src/org/redkale/convert/ext/ByteBufferSimpledCoder.java +++ b/src/org/redkale/convert/ext/ByteBufferSimpledCoder.java @@ -30,12 +30,13 @@ public final class ByteBufferSimpledCoder 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(); } diff --git a/src/org/redkale/convert/ext/CharArraySimpledCoder.java b/src/org/redkale/convert/ext/CharArraySimpledCoder.java index bafd025a4..aaf124d76 100644 --- a/src/org/redkale/convert/ext/CharArraySimpledCoder.java +++ b/src/org/redkale/convert/ext/CharArraySimpledCoder.java @@ -29,12 +29,13 @@ public final class CharArraySimpledCoder 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(); } diff --git a/src/org/redkale/convert/ext/DoubleArraySimpledCoder.java b/src/org/redkale/convert/ext/DoubleArraySimpledCoder.java index 890371c52..278d2cc75 100644 --- a/src/org/redkale/convert/ext/DoubleArraySimpledCoder.java +++ b/src/org/redkale/convert/ext/DoubleArraySimpledCoder.java @@ -30,12 +30,13 @@ public final class DoubleArraySimpledCoder 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(); } diff --git a/src/org/redkale/convert/ext/FloatArraySimpledCoder.java b/src/org/redkale/convert/ext/FloatArraySimpledCoder.java index 8c7ecb6bc..b86cd9895 100644 --- a/src/org/redkale/convert/ext/FloatArraySimpledCoder.java +++ b/src/org/redkale/convert/ext/FloatArraySimpledCoder.java @@ -29,12 +29,13 @@ public final class FloatArraySimpledCoder 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(); } diff --git a/src/org/redkale/convert/ext/IntArraySimpledCoder.java b/src/org/redkale/convert/ext/IntArraySimpledCoder.java index e1fc3ce9d..0a411a43d 100644 --- a/src/org/redkale/convert/ext/IntArraySimpledCoder.java +++ b/src/org/redkale/convert/ext/IntArraySimpledCoder.java @@ -30,12 +30,13 @@ public final class IntArraySimpledCoder 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(); } diff --git a/src/org/redkale/convert/ext/LongArraySimpledCoder.java b/src/org/redkale/convert/ext/LongArraySimpledCoder.java index 14ed2ba84..7f3738084 100644 --- a/src/org/redkale/convert/ext/LongArraySimpledCoder.java +++ b/src/org/redkale/convert/ext/LongArraySimpledCoder.java @@ -30,12 +30,13 @@ public final class LongArraySimpledCoder 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(); } diff --git a/src/org/redkale/convert/ext/ShortArraySimpledCoder.java b/src/org/redkale/convert/ext/ShortArraySimpledCoder.java index 75085d598..19204c877 100644 --- a/src/org/redkale/convert/ext/ShortArraySimpledCoder.java +++ b/src/org/redkale/convert/ext/ShortArraySimpledCoder.java @@ -29,12 +29,13 @@ public final class ShortArraySimpledCoder 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(); } diff --git a/src/org/redkale/convert/ext/StringArraySimpledCoder.java b/src/org/redkale/convert/ext/StringArraySimpledCoder.java index 006ba46fc..f66e79715 100644 --- a/src/org/redkale/convert/ext/StringArraySimpledCoder.java +++ b/src/org/redkale/convert/ext/StringArraySimpledCoder.java @@ -29,12 +29,13 @@ public final class StringArraySimpledCoder 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(); } diff --git a/src/org/redkale/convert/json/JsonWriter.java b/src/org/redkale/convert/json/JsonWriter.java index ede29ea0b..f15323ec6 100644 --- a/src/org/redkale/convert/json/JsonWriter.java +++ b/src/org/redkale/convert/json/JsonWriter.java @@ -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 encoder, Object obj) { + public final int writeArrayB(int size, Encodeable encoder, Object obj) { writeTo('['); + return -1; } @Override @@ -360,8 +362,9 @@ public class JsonWriter extends Writer { } @Override - public final void writeMapB(int size, Encodeable keyEncoder, Encodeable valueEncoder, Object obj) { + public final int writeMapB(int size, Encodeable keyEncoder, Encodeable valueEncoder, Object obj) { writeTo('{'); + return -1; } @Override