From 5cd399b2dfde83c7f426ecdfde97d4707e5cf4d7 Mon Sep 17 00:00:00 2001 From: Redkale <8730487+redkale@users.noreply.github.com> Date: Thu, 19 Sep 2019 13:12:33 +0800 Subject: [PATCH] --- src/org/redkale/convert/BinaryConvert.java | 8 -- src/org/redkale/convert/Convert.java | 13 ++-- src/org/redkale/convert/TextConvert.java | 8 -- src/org/redkale/convert/bson/BsonConvert.java | 70 ++++++----------- src/org/redkale/convert/json/JsonConvert.java | 77 +++++++------------ 5 files changed, 60 insertions(+), 116 deletions(-) diff --git a/src/org/redkale/convert/BinaryConvert.java b/src/org/redkale/convert/BinaryConvert.java index a32295148..5019545a2 100644 --- a/src/org/redkale/convert/BinaryConvert.java +++ b/src/org/redkale/convert/BinaryConvert.java @@ -6,8 +6,6 @@ package org.redkale.convert; import java.lang.reflect.Type; -import java.util.function.BiFunction; -import org.redkale.util.Attribute; /** * 二进制序列化/反序列化操作类 @@ -35,10 +33,4 @@ public abstract class BinaryConvert extends public abstract byte[] convertTo(final Type type, final Object value); public abstract byte[] convertMapTo(final Object... values); - - public abstract byte[] convertTo(BiFunction fieldFunc, final Object value); - - public abstract byte[] convertTo(final Type type, BiFunction fieldFunc, final Object value); - - public abstract byte[] convertMapTo(BiFunction fieldFunc, final Object... values); } diff --git a/src/org/redkale/convert/Convert.java b/src/org/redkale/convert/Convert.java index 55199c529..eca49ffbd 100644 --- a/src/org/redkale/convert/Convert.java +++ b/src/org/redkale/convert/Convert.java @@ -32,11 +32,17 @@ public abstract class Convert { return this.factory; } - protected S funcWrite(S writer, BiFunction fieldFunc) { + protected S configWrite(S writer) { + return writer; + } + + protected S fieldFunc(S writer, BiFunction fieldFunc) { writer.fieldFunc = fieldFunc; return writer; } + public abstract Convert newConvert(final BiFunction fieldFunc); + public abstract boolean isBinary(); public abstract T convertFrom(final Type type, final byte[] bytes); @@ -51,9 +57,4 @@ public abstract class Convert { public abstract ByteBuffer[] convertMapTo(final Supplier supplier, final Object... values); - public abstract ByteBuffer[] convertTo(final Supplier supplier, BiFunction fieldFunc, final Object value); - - public abstract ByteBuffer[] convertTo(final Supplier supplier, final Type type, BiFunction fieldFunc, final Object value); - - public abstract ByteBuffer[] convertMapTo(final Supplier supplier, BiFunction fieldFunc, final Object... values); } diff --git a/src/org/redkale/convert/TextConvert.java b/src/org/redkale/convert/TextConvert.java index 0229c3158..7d9d0b086 100644 --- a/src/org/redkale/convert/TextConvert.java +++ b/src/org/redkale/convert/TextConvert.java @@ -6,8 +6,6 @@ package org.redkale.convert; import java.lang.reflect.Type; -import java.util.function.BiFunction; -import org.redkale.util.Attribute; /** * 文本序列化/反序列化操作类 @@ -35,10 +33,4 @@ public abstract class TextConvert extends Co public abstract String convertTo(final Type type, final Object value); public abstract String convertMapTo(final Object... values); - - public abstract String convertTo(BiFunction fieldFunc, final Object value); - - public abstract String convertTo(final Type type, BiFunction fieldFunc, final Object value); - - public abstract String convertMapTo(BiFunction fieldFunc, final Object... values); } diff --git a/src/org/redkale/convert/bson/BsonConvert.java b/src/org/redkale/convert/bson/BsonConvert.java index 2019d0717..ac4214b3c 100644 --- a/src/org/redkale/convert/bson/BsonConvert.java +++ b/src/org/redkale/convert/bson/BsonConvert.java @@ -37,7 +37,7 @@ import org.redkale.util.*; * * @author zhangjx */ -public final class BsonConvert extends BinaryConvert { +public class BsonConvert extends BinaryConvert { private static final ObjectPool readerPool = BsonReader.createPool(Integer.getInteger("convert.bson.pool.size", 16)); @@ -59,6 +59,16 @@ public final class BsonConvert extends BinaryConvert { return BsonFactory.root().getConvert(); } + @Override + public BsonConvert newConvert(final BiFunction fieldFunc) { + return new BsonConvert(getFactory(), tiny) { + @Override + protected S configWrite(S writer) { + return fieldFunc(writer, fieldFunc); + } + }; + } + //------------------------------ reader ----------------------------------------------------------- public BsonReader pollBsonReader(final ByteBuffer... buffers) { return new BsonByteBufferReader((ConvertMask) null, buffers); @@ -78,11 +88,11 @@ public final class BsonConvert extends BinaryConvert { //------------------------------ writer ----------------------------------------------------------- public BsonByteBufferWriter pollBsonWriter(final Supplier supplier) { - return new BsonByteBufferWriter(tiny, supplier); + return configWrite(new BsonByteBufferWriter(tiny, supplier)); } public BsonWriter pollBsonWriter(final OutputStream out) { - return new BsonStreamWriter(tiny, out); + return configWrite(new BsonStreamWriter(tiny, out)); } public BsonWriter pollBsonWriter() { @@ -142,13 +152,8 @@ public final class BsonConvert extends BinaryConvert { //------------------------------ convertTo ----------------------------------------------------------- @Override public byte[] convertTo(final Object value) { - return convertTo((BiFunction) null, value); - } - - @Override - public byte[] convertTo(BiFunction fieldFunc, final Object value) { if (value == null) { - final BsonWriter out = funcWrite(writerPool.get().tiny(tiny), fieldFunc); + final BsonWriter out = writerPool.get().tiny(tiny); out.writeNull(); byte[] result = out.toArray(); writerPool.accept(out); @@ -159,13 +164,8 @@ public final class BsonConvert extends BinaryConvert { @Override public byte[] convertTo(final Type type, final Object value) { - return convertTo(type, (BiFunction) null, value); - } - - @Override - public byte[] convertTo(final Type type, BiFunction fieldFunc, final Object value) { if (type == null) return null; - final BsonWriter out = funcWrite(writerPool.get().tiny(tiny), fieldFunc); + final BsonWriter out = writerPool.get().tiny(tiny); factory.loadEncoder(type).convertTo(out, value); byte[] result = out.toArray(); writerPool.accept(out); @@ -174,13 +174,8 @@ public final class BsonConvert extends BinaryConvert { @Override public byte[] convertMapTo(final Object... values) { - return convertTo((BiFunction) null, values); - } - - @Override - public byte[] convertMapTo(BiFunction fieldFunc, final Object... values) { if (values == null) return null; - final BsonWriter out = funcWrite(writerPool.get().tiny(tiny), fieldFunc); + final BsonWriter out = writerPool.get().tiny(tiny); ((AnyEncoder) factory.getAnyEncoder()).convertMapTo(out, values); byte[] result = out.toArray(); writerPool.accept(out); @@ -189,38 +184,33 @@ public final class BsonConvert extends BinaryConvert { public void convertTo(final OutputStream out, final Object value) { if (value == null) { - new BsonStreamWriter(tiny, out).writeNull(); + pollBsonWriter(out).writeNull(); } else { - factory.loadEncoder(value.getClass()).convertTo(new BsonStreamWriter(tiny, out), value); + factory.loadEncoder(value.getClass()).convertTo(pollBsonWriter(out), value); } } public void convertTo(final OutputStream out, final Type type, final Object value) { if (type == null) return; if (value == null) { - new BsonStreamWriter(tiny, out).writeNull(); + pollBsonWriter(out).writeNull(); } else { - factory.loadEncoder(type).convertTo(new BsonStreamWriter(tiny, out), value); + factory.loadEncoder(type).convertTo(pollBsonWriter(out), value); } } public void convertMapTo(final OutputStream out, final Object... values) { if (values == null) { - new BsonStreamWriter(tiny, out).writeNull(); + pollBsonWriter(out).writeNull(); } else { - ((AnyEncoder) factory.getAnyEncoder()).convertMapTo(new BsonStreamWriter(tiny, out), values); + ((AnyEncoder) factory.getAnyEncoder()).convertMapTo(pollBsonWriter(out), values); } } @Override public ByteBuffer[] convertTo(final Supplier supplier, final Object value) { - return convertTo(supplier, (BiFunction) null, value); - } - - @Override - public ByteBuffer[] convertTo(final Supplier supplier, BiFunction fieldFunc, final Object value) { if (supplier == null) return null; - BsonByteBufferWriter out = funcWrite(new BsonByteBufferWriter(tiny, supplier), fieldFunc); + BsonByteBufferWriter out = pollBsonWriter(supplier); if (value == null) { out.writeNull(); } else { @@ -231,13 +221,8 @@ public final class BsonConvert extends BinaryConvert { @Override public ByteBuffer[] convertTo(final Supplier supplier, final Type type, final Object value) { - return convertTo(supplier, type, (BiFunction) null, value); - } - - @Override - public ByteBuffer[] convertTo(final Supplier supplier, final Type type, BiFunction fieldFunc, final Object value) { if (supplier == null || type == null) return null; - BsonByteBufferWriter out = funcWrite(new BsonByteBufferWriter(tiny, supplier), fieldFunc); + BsonByteBufferWriter out = pollBsonWriter(supplier); if (value == null) { out.writeNull(); } else { @@ -248,13 +233,8 @@ public final class BsonConvert extends BinaryConvert { @Override public ByteBuffer[] convertMapTo(final Supplier supplier, final Object... values) { - return convertMapTo(supplier, (BiFunction) null, values); - } - - @Override - public ByteBuffer[] convertMapTo(final Supplier supplier, BiFunction fieldFunc, final Object... values) { if (supplier == null) return null; - BsonByteBufferWriter out = funcWrite(new BsonByteBufferWriter(tiny, supplier), fieldFunc); + BsonByteBufferWriter out = pollBsonWriter(supplier); if (values == null) { out.writeNull(); } else { diff --git a/src/org/redkale/convert/json/JsonConvert.java b/src/org/redkale/convert/json/JsonConvert.java index 5049742d1..5dc0b3a98 100644 --- a/src/org/redkale/convert/json/JsonConvert.java +++ b/src/org/redkale/convert/json/JsonConvert.java @@ -21,7 +21,7 @@ import org.redkale.util.*; * @author zhangjx */ @SuppressWarnings("unchecked") -public final class JsonConvert extends TextConvert { +public class JsonConvert extends TextConvert { public static final Type TYPE_MAP_STRING_STRING = new TypeToken>() { }.getType(); @@ -46,6 +46,16 @@ public final class JsonConvert extends TextConvert { return JsonFactory.root().getConvert(); } + @Override + public JsonConvert newConvert(final BiFunction fieldFunc) { + return new JsonConvert(getFactory(), tiny) { + @Override + protected S configWrite(S writer) { + return fieldFunc(writer, fieldFunc); + } + }; + } + //------------------------------ reader ----------------------------------------------------------- public JsonReader pollJsonReader(final ByteBuffer... buffers) { return new JsonByteBufferReader((ConvertMask) null, buffers); @@ -65,19 +75,19 @@ public final class JsonConvert extends TextConvert { //------------------------------ writer ----------------------------------------------------------- public JsonByteBufferWriter pollJsonWriter(final Supplier supplier) { - return new JsonByteBufferWriter(tiny, supplier); + return configWrite(new JsonByteBufferWriter(tiny, supplier)); } public JsonWriter pollJsonWriter(final OutputStream out) { - return new JsonStreamWriter(tiny, out); + return configWrite(new JsonStreamWriter(tiny, out)); } public JsonWriter pollJsonWriter(final Charset charset, final OutputStream out) { - return new JsonStreamWriter(tiny, charset, out); + return configWrite(new JsonStreamWriter(tiny, charset, out)); } public JsonWriter pollJsonWriter() { - return writerPool.get().tiny(tiny); + return configWrite(writerPool.get().tiny(tiny)); } public void offerJsonWriter(final JsonWriter writer) { @@ -85,6 +95,7 @@ public final class JsonConvert extends TextConvert { } //------------------------------ convertFrom ----------------------------------------------------------- + @Override public T convertFrom(final Type type, final byte[] bytes) { if (bytes == null) return null; return convertFrom(type, new String(bytes, StandardCharsets.UTF_8)); @@ -186,22 +197,11 @@ public final class JsonConvert extends TextConvert { return convertTo(value.getClass(), value); } - @Override - public String convertTo(BiFunction fieldFunc, final Object value) { - if (value == null) return "null"; - return convertTo(value.getClass(), fieldFunc, value); - } - @Override public String convertTo(final Type type, final Object value) { - return convertTo(type, (BiFunction) null, value); - } - - @Override - public String convertTo(final Type type, BiFunction fieldFunc, final Object value) { if (type == null) return null; if (value == null) return "null"; - final JsonWriter writer = funcWrite(writerPool.get().tiny(tiny), fieldFunc); + final JsonWriter writer = pollJsonWriter(); writer.specify(type); factory.loadEncoder(type).convertTo(writer, value); String result = writer.toString(); @@ -212,13 +212,7 @@ public final class JsonConvert extends TextConvert { @Override public String convertMapTo(final Object... values) { if (values == null) return "null"; - return convertMapTo((BiFunction) null, values); - } - - @Override - public String convertMapTo(BiFunction fieldFunc, final Object... values) { - if (values == null) return "null"; - final JsonWriter writer = funcWrite(writerPool.get().tiny(tiny), fieldFunc); + final JsonWriter writer = pollJsonWriter(); ((AnyEncoder) factory.getAnyEncoder()).convertMapTo(writer, values); String result = writer.toString(); writerPool.accept(writer); @@ -227,7 +221,7 @@ public final class JsonConvert extends TextConvert { public void convertTo(final OutputStream out, final Object value) { if (value == null) { - new JsonStreamWriter(tiny, out).writeNull(); + pollJsonWriter(out).writeNull(); } else { convertTo(out, value.getClass(), value); } @@ -236,9 +230,9 @@ public final class JsonConvert extends TextConvert { public void convertTo(final OutputStream out, final Type type, final Object value) { if (type == null) return; if (value == null) { - new JsonStreamWriter(tiny, out).writeNull(); + pollJsonWriter(out).writeNull(); } else { - final JsonWriter writer = writerPool.get().tiny(tiny); + final JsonWriter writer = pollJsonWriter(); writer.specify(type); factory.loadEncoder(type).convertTo(writer, value); byte[] bs = writer.toBytes(); @@ -253,9 +247,9 @@ public final class JsonConvert extends TextConvert { public void convertMapTo(final OutputStream out, final Object... values) { if (values == null) { - new JsonStreamWriter(tiny, out).writeNull(); + pollJsonWriter(out).writeNull(); } else { - final JsonWriter writer = writerPool.get().tiny(tiny); + final JsonWriter writer = pollJsonWriter(); ((AnyEncoder) factory.getAnyEncoder()).convertMapTo(writer, values); byte[] bs = writer.toBytes(); writerPool.accept(writer); @@ -269,13 +263,8 @@ public final class JsonConvert extends TextConvert { @Override public ByteBuffer[] convertTo(final Supplier supplier, final Object value) { - return convertTo(supplier, (BiFunction) null, value); - } - - @Override - public ByteBuffer[] convertTo(final Supplier supplier, BiFunction fieldFunc, final Object value) { if (supplier == null) return null; - JsonByteBufferWriter out = funcWrite(new JsonByteBufferWriter(tiny, null, supplier), fieldFunc); + JsonByteBufferWriter out = pollJsonWriter(supplier); if (value == null) { out.writeNull(); } else { @@ -286,13 +275,8 @@ public final class JsonConvert extends TextConvert { @Override public ByteBuffer[] convertTo(final Supplier supplier, final Type type, final Object value) { - return convertTo(supplier, type, (BiFunction) null, value); - } - - @Override - public ByteBuffer[] convertTo(final Supplier supplier, final Type type, BiFunction fieldFunc, final Object value) { if (supplier == null || type == null) return null; - JsonByteBufferWriter out = funcWrite(new JsonByteBufferWriter(tiny, null, supplier), fieldFunc); + JsonByteBufferWriter out = pollJsonWriter(supplier); if (value == null) { out.writeNull(); } else { @@ -304,13 +288,8 @@ public final class JsonConvert extends TextConvert { @Override public ByteBuffer[] convertMapTo(final Supplier supplier, final Object... values) { - return convertMapTo(supplier, (BiFunction) null, values); - } - - @Override - public ByteBuffer[] convertMapTo(final Supplier supplier, BiFunction fieldFunc, final Object... values) { if (supplier == null) return null; - JsonByteBufferWriter out = funcWrite(new JsonByteBufferWriter(tiny, null, supplier), fieldFunc); + JsonByteBufferWriter out = pollJsonWriter(supplier); if (values == null) { out.writeNull(); } else { @@ -352,14 +331,14 @@ public final class JsonConvert extends TextConvert { public JsonWriter convertToWriter(final Type type, final Object value) { if (type == null) return null; - final JsonWriter writer = writerPool.get().tiny(tiny); + final JsonWriter writer = pollJsonWriter(); writer.specify(type); factory.loadEncoder(type).convertTo(writer, value); return writer; } public JsonWriter convertMapToWriter(final Object... values) { - final JsonWriter writer = writerPool.get().tiny(tiny); + final JsonWriter writer = pollJsonWriter(); ((AnyEncoder) factory.getAnyEncoder()).convertMapTo(writer, values); return writer; }