From 194a06c748ea094b59d6b3b33e9d06d819acbb8d Mon Sep 17 00:00:00 2001 From: Redkale <22250530@qq.com> Date: Fri, 13 Jul 2018 09:41:26 +0800 Subject: [PATCH] --- src/org/redkale/convert/ArrayEncoder.java | 2 +- src/org/redkale/convert/ObjectEncoder.java | 2 +- src/org/redkale/convert/Writer.java | 28 ++++++++++++++ .../convert/bson/BsonByteBufferWriter.java | 1 + src/org/redkale/convert/bson/BsonWriter.java | 1 + .../convert/json/JsonByteBufferWriter.java | 1 + src/org/redkale/convert/json/JsonConvert.java | 37 +++++++++++-------- src/org/redkale/convert/json/JsonWriter.java | 1 + 8 files changed, 55 insertions(+), 18 deletions(-) diff --git a/src/org/redkale/convert/ArrayEncoder.java b/src/org/redkale/convert/ArrayEncoder.java index 981bcc90d..5e0b3124b 100644 --- a/src/org/redkale/convert/ArrayEncoder.java +++ b/src/org/redkale/convert/ArrayEncoder.java @@ -82,7 +82,7 @@ public final class ArrayEncoder implements Encodeable { boolean first = true; for (Object v : value) { if (!first) out.writeArrayMark(); - ((v != null && v.getClass() == comp) ? encoder : anyEncoder).convertTo(out, v); + ((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/ObjectEncoder.java b/src/org/redkale/convert/ObjectEncoder.java index 9a40ab286..f94f19006 100644 --- a/src/org/redkale/convert/ObjectEncoder.java +++ b/src/org/redkale/convert/ObjectEncoder.java @@ -136,7 +136,7 @@ public final class ObjectEncoder implements Encodeable defaultSize) { this.content = new byte[defaultSize]; } diff --git a/src/org/redkale/convert/json/JsonByteBufferWriter.java b/src/org/redkale/convert/json/JsonByteBufferWriter.java index 491a4fd86..51c8e89be 100644 --- a/src/org/redkale/convert/json/JsonByteBufferWriter.java +++ b/src/org/redkale/convert/json/JsonByteBufferWriter.java @@ -49,6 +49,7 @@ public class JsonByteBufferWriter extends JsonWriter { @Override protected boolean recycle() { this.index = 0; + this.specify = null; this.charset = null; this.buffers = null; return false; diff --git a/src/org/redkale/convert/json/JsonConvert.java b/src/org/redkale/convert/json/JsonConvert.java index 584a0478f..658929754 100644 --- a/src/org/redkale/convert/json/JsonConvert.java +++ b/src/org/redkale/convert/json/JsonConvert.java @@ -80,8 +80,8 @@ public final class JsonConvert extends TextConvert { return writerPool.get().tiny(tiny); } - public void offerJsonWriter(final JsonWriter out) { - if (out != null) writerPool.accept(out); + public void offerJsonWriter(final JsonWriter writer) { + if (writer != null) writerPool.accept(writer); } //------------------------------ convertFrom ----------------------------------------------------------- @@ -139,20 +139,21 @@ public final class JsonConvert extends TextConvert { public String convertTo(final Type type, final Object value) { if (type == null) return null; if (value == null) return "null"; - final JsonWriter out = writerPool.get().tiny(tiny); - factory.loadEncoder(type).convertTo(out, value); - String result = out.toString(); - writerPool.accept(out); + final JsonWriter writer = writerPool.get().tiny(tiny); + writer.specify(type); + factory.loadEncoder(type).convertTo(writer, value); + String result = writer.toString(); + writerPool.accept(writer); return result; } @Override public String convertMapTo(final Object... values) { if (values == null) return "null"; - final JsonWriter out = writerPool.get().tiny(tiny); - ((AnyEncoder) factory.getAnyEncoder()).convertMapTo(out, values); - String result = out.toString(); - writerPool.accept(out); + final JsonWriter writer = writerPool.get().tiny(tiny); + ((AnyEncoder) factory.getAnyEncoder()).convertMapTo(writer, values); + String result = writer.toString(); + writerPool.accept(writer); return result; } @@ -170,6 +171,7 @@ public final class JsonConvert extends TextConvert { new JsonStreamWriter(tiny, out).writeNull(); } else { final JsonWriter writer = writerPool.get().tiny(tiny); + writer.specify(type); factory.loadEncoder(type).convertTo(writer, value); byte[] bs = writer.toBytes(); writerPool.accept(writer); @@ -216,6 +218,7 @@ public final class JsonConvert extends TextConvert { if (value == null) { out.writeNull(); } else { + out.specify(type); factory.loadEncoder(type).convertTo(out, value); } return out.toBuffers(); @@ -246,6 +249,7 @@ public final class JsonConvert extends TextConvert { if (value == null) { writer.writeNull(); } else { + writer.specify(type); factory.loadEncoder(type).convertTo(writer, value); } } @@ -265,14 +269,15 @@ public final class JsonConvert extends TextConvert { public JsonWriter convertToWriter(final Type type, final Object value) { if (type == null) return null; - final JsonWriter out = writerPool.get().tiny(tiny); - factory.loadEncoder(type).convertTo(out, value); - return out; + final JsonWriter writer = writerPool.get().tiny(tiny); + writer.specify(type); + factory.loadEncoder(type).convertTo(writer, value); + return writer; } public JsonWriter convertMapToWriter(final Object... values) { - final JsonWriter out = writerPool.get().tiny(tiny); - ((AnyEncoder) factory.getAnyEncoder()).convertMapTo(out, values); - return out; + final JsonWriter writer = writerPool.get().tiny(tiny); + ((AnyEncoder) factory.getAnyEncoder()).convertMapTo(writer, values); + return writer; } } diff --git a/src/org/redkale/convert/json/JsonWriter.java b/src/org/redkale/convert/json/JsonWriter.java index 914ead004..160833c02 100644 --- a/src/org/redkale/convert/json/JsonWriter.java +++ b/src/org/redkale/convert/json/JsonWriter.java @@ -99,6 +99,7 @@ public class JsonWriter extends Writer { protected boolean recycle() { this.count = 0; + this.specify = null; if (this.content.length > defaultSize) { this.content = new char[defaultSize]; }