From d44fb67f88ae7976d7c7d637b71a4b939f593302 Mon Sep 17 00:00:00 2001 From: redkale Date: Sun, 25 Jun 2023 10:44:48 +0800 Subject: [PATCH] =?UTF-8?q?Convert=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/redkale/convert/BinaryConvert.java | 4 +- .../java/org/redkale/convert/Convert.java | 20 ++- .../java/org/redkale/convert/TextConvert.java | 4 +- .../org/redkale/convert/bson/BsonConvert.java | 83 ++--------- .../org/redkale/convert/json/JsonConvert.java | 131 ++++-------------- 5 files changed, 63 insertions(+), 179 deletions(-) diff --git a/src/main/java/org/redkale/convert/BinaryConvert.java b/src/main/java/org/redkale/convert/BinaryConvert.java index 6db363567..d4a3a18be 100644 --- a/src/main/java/org/redkale/convert/BinaryConvert.java +++ b/src/main/java/org/redkale/convert/BinaryConvert.java @@ -28,7 +28,9 @@ public abstract class BinaryConvert extends return true; } - public abstract byte[] convertTo(final Object value); + public final byte[] convertTo(final Object value) { + return convertTo((Type) null, value); + } public abstract byte[] convertTo(final Type type, final Object value); diff --git a/src/main/java/org/redkale/convert/Convert.java b/src/main/java/org/redkale/convert/Convert.java index 9dd5d9eef..00e7ed73a 100644 --- a/src/main/java/org/redkale/convert/Convert.java +++ b/src/main/java/org/redkale/convert/Convert.java @@ -79,23 +79,33 @@ public abstract class Convert { public abstract T convertFrom(final Type type, final ConvertMask mask, final ByteBuffer... buffers); - public abstract void convertTo(final W writer, final Object value); + public final void convertTo(final W writer, final Object value) { + convertTo(writer, (Type) null, value); + } public abstract void convertTo(final W writer, final Type type, final Object value); - public abstract byte[] convertToBytes(final Object value); + public final byte[] convertToBytes(final Object value) { + return convertToBytes((Type) null, value); + } public abstract byte[] convertToBytes(final Type type, final Object value); - public abstract void convertToBytes(final Object value, final ConvertBytesHandler handler); + public final void convertToBytes(final Object value, final ConvertBytesHandler handler) { + convertToBytes((Type) null, value, handler); + } public abstract void convertToBytes(final Type type, final Object value, final ConvertBytesHandler handler); - public abstract void convertToBytes(final ByteArray array, final Object value); + public final void convertToBytes(final ByteArray array, final Object value) { + convertToBytes(array, (Type) null, value); + } public abstract void convertToBytes(final ByteArray array, final Type type, final Object value); - public abstract ByteBuffer[] convertTo(final Supplier supplier, final Object value); + public final ByteBuffer[] convertTo(final Supplier supplier, final Object value) { + return convertTo(supplier, (Type) null, value); + } public abstract ByteBuffer[] convertTo(final Supplier supplier, final Type type, final Object value); diff --git a/src/main/java/org/redkale/convert/TextConvert.java b/src/main/java/org/redkale/convert/TextConvert.java index 57ba32bc8..b33a375bf 100644 --- a/src/main/java/org/redkale/convert/TextConvert.java +++ b/src/main/java/org/redkale/convert/TextConvert.java @@ -30,7 +30,9 @@ public abstract class TextConvert extends Co public abstract T convertFrom(final Type type, final String text); - public abstract String convertTo(final Object value); + public final String convertTo(final Object value) { + return convertTo((Type) null, value); + } public abstract String convertTo(final Type type, final Object value); diff --git a/src/main/java/org/redkale/convert/bson/BsonConvert.java b/src/main/java/org/redkale/convert/bson/BsonConvert.java index 27301d376..fa4387364 100644 --- a/src/main/java/org/redkale/convert/bson/BsonConvert.java +++ b/src/main/java/org/redkale/convert/bson/BsonConvert.java @@ -202,7 +202,7 @@ public class BsonConvert extends BinaryConvert { //------------------------------ convertTo ----------------------------------------------------------- @Override - public byte[] convertTo(final Object value) { + public byte[] convertTo(final Type type, final Object value) { if (value == null) { final BsonWriter out = pollWriter(); out.writeNull(); @@ -210,36 +210,18 @@ public class BsonConvert extends BinaryConvert { offerWriter(out); return result; } - return convertTo(value.getClass(), value); - } - - @Override - public byte[] convertTo(final Type type, final Object value) { - if (type == null) { - return null; - } final BsonWriter writer = pollWriter(); - factory.loadEncoder(type).convertTo(writer, value); + factory.loadEncoder(type == null ? value.getClass() : type).convertTo(writer, value); byte[] result = writer.toArray(); offerWriter(writer); return result; } - @Override - public byte[] convertToBytes(final Object value) { - return convertTo(value); - } - @Override public byte[] convertToBytes(final Type type, final Object value) { return convertTo(type, value); } - @Override - public void convertToBytes(final Object value, final ConvertBytesHandler handler) { - convertToBytes(value == null ? null : value.getClass(), value, handler); - } - @Override public void convertToBytes(final Type type, final Object value, final ConvertBytesHandler handler) { final BsonWriter writer = pollWriter(); @@ -251,99 +233,58 @@ public class BsonConvert extends BinaryConvert { writer.completed(handler, writerConsumer); } - @Override - public void convertToBytes(final ByteArray array, final Object value) { - convertToBytes(array, value == null ? null : value.getClass(), value); - } - @Override public void convertToBytes(final ByteArray array, final Type type, final Object value) { final BsonWriter writer = configWrite(new BsonWriter(array).tiny(tiny)); - if (type == null) { + if (value == null) { writer.writeNull(); } else { - factory.loadEncoder(type).convertTo(writer, value); + factory.loadEncoder(type == null ? value.getClass() : type).convertTo(writer, value); } writer.directTo(array); } public void convertTo(final OutputStream out, final Object value) { - if (value == null) { - pollWriter(out).writeNull(); - } else { - factory.loadEncoder(value.getClass()).convertTo(pollWriter(out), value); - } + convertTo(out, (Type) null, value); } public void convertTo(final OutputStream out, final Type type, final Object value) { - if (type == null) { - return; - } if (value == null) { pollWriter(out).writeNull(); } else { - factory.loadEncoder(type).convertTo(pollWriter(out), value); + factory.loadEncoder(type == null ? value.getClass() : type).convertTo(pollWriter(out), value); } } - @Override - public ByteBuffer[] convertTo(final Supplier supplier, final Object value) { - if (supplier == null) { - return null; - } - BsonByteBufferWriter out = pollWriter(supplier); - if (value == null) { - out.writeNull(); - } else { - factory.loadEncoder(value.getClass()).convertTo(out, value); - } - return out.toBuffers(); - } - @Override public ByteBuffer[] convertTo(final Supplier supplier, final Type type, final Object value) { - if (supplier == null || type == null) { + if (supplier == null) { return null; } BsonByteBufferWriter writer = pollWriter(supplier); if (value == null) { writer.writeNull(); } else { - factory.loadEncoder(type).convertTo(writer, value); + factory.loadEncoder(type == null ? value.getClass() : type).convertTo(writer, value); } return writer.toBuffers(); } @Override - public void convertTo(final BsonWriter writer, final Object value) { + public void convertTo(final BsonWriter writer, final Type type, final Object value) { if (value == null) { writer.writeNull(); } else { - factory.loadEncoder(value.getClass()).convertTo(writer, value); + factory.loadEncoder(type == null ? value.getClass() : type).convertTo(writer, value); } } - @Override - public void convertTo(final BsonWriter writer, final Type type, final Object value) { - if (type == null) { - return; - } - factory.loadEncoder(type).convertTo(writer, value); - } - - public BsonWriter convertToWriter(final Object value) { - if (value == null) { - return null; - } - return convertToWriter(value.getClass(), value); - } - public BsonWriter convertToWriter(final Type type, final Object value) { - if (type == null) { + if (value == null) { return null; } final BsonWriter writer = writerPool.get().tiny(tiny); - factory.loadEncoder(type).convertTo(writer, value); + factory.loadEncoder(type == null ? value.getClass() : type).convertTo(writer, value); return writer; } } diff --git a/src/main/java/org/redkale/convert/json/JsonConvert.java b/src/main/java/org/redkale/convert/json/JsonConvert.java index 638371005..cd9831afb 100644 --- a/src/main/java/org/redkale/convert/json/JsonConvert.java +++ b/src/main/java/org/redkale/convert/json/JsonConvert.java @@ -324,30 +324,20 @@ public class JsonConvert extends TextConvert { } //------------------------------ convertTo ----------------------------------------------------------- - @Override - public String convertTo(final Object value) { - if (value == null) { - return "null"; - } - return convertTo(value.getClass(), value); - } - @Override public String convertTo(final Type type, final Object value) { - if (type == null) { - return null; - } if (value == null) { return "null"; } JsonBytesWriter writer = pollJsonBytesWriter(); + final Type t = type == null ? value.getClass() : type; Encodeable encoder = this.lastConvertEncodeable; - if (encoder == null || encoder.getType() != type) { - encoder = factory.loadEncoder(type); + if (encoder == null || encoder.getType() != t) { + encoder = factory.loadEncoder(t); this.lastConvertEncodeable = encoder; } if (encoder.specifyable()) { - writer.specificObjectType(type); + writer.specificObjectType(t); } encoder.convertTo(writer, value); @@ -356,30 +346,20 @@ public class JsonConvert extends TextConvert { return result; } - @Override - public byte[] convertToBytes(final Object value) { - if (value == null) { - return null; - } - return convertToBytes(value.getClass(), value); - } - @Override public byte[] convertToBytes(final Type type, final Object value) { - if (type == null) { - return null; - } if (value == null) { return null; } JsonBytesWriter writer = pollJsonBytesWriter(); + final Type t = type == null ? value.getClass() : type; Encodeable encoder = this.lastConvertEncodeable; - if (encoder == null || encoder.getType() != type) { - encoder = factory.loadEncoder(type); + if (encoder == null || encoder.getType() != t) { + encoder = factory.loadEncoder(t); this.lastConvertEncodeable = encoder; } if (encoder.specifyable()) { - writer.specificObjectType(type); + writer.specificObjectType(t); } encoder.convertTo(writer, value); @@ -388,84 +368,66 @@ public class JsonConvert extends TextConvert { return result; } - @Override - public void convertToBytes(final Object value, final ConvertBytesHandler handler) { - convertToBytes(value == null ? null : value.getClass(), value, handler); - } - @Override public void convertToBytes(final Type type, final Object value, final ConvertBytesHandler handler) { JsonBytesWriter writer = pollJsonBytesWriter(); - if (type == null) { + if (value == null) { writer.writeNull(); } else { + final Type t = type == null ? value.getClass() : type; Encodeable encoder = this.lastConvertEncodeable; - if (encoder == null || encoder.getType() != type) { - encoder = factory.loadEncoder(type); + if (encoder == null || encoder.getType() != t) { + encoder = factory.loadEncoder(t); this.lastConvertEncodeable = encoder; } if (encoder.specifyable()) { - writer.specificObjectType(type); + writer.specificObjectType(t); } encoder.convertTo(writer, value); } writer.completed(handler, offerBytesConsumer); } - @Override - public void convertToBytes(final ByteArray array, final Object value) { - convertToBytes(array, value == null ? null : value.getClass(), value); - } - @Override public void convertToBytes(final ByteArray array, final Type type, final Object value) { JsonBytesWriter writer = configWrite(new JsonBytesWriter(tiny, array)); - if (type == null) { + if (value == null) { writer.writeNull(); } else { + final Type t = type == null ? value.getClass() : type; Encodeable encoder = this.lastConvertEncodeable; - if (encoder == null || encoder.getType() != type) { - encoder = factory.loadEncoder(type); + if (encoder == null || encoder.getType() != t) { + encoder = factory.loadEncoder(t); this.lastConvertEncodeable = encoder; } if (encoder.specifyable()) { - writer.specificObjectType(type); + writer.specificObjectType(t); } encoder.convertTo(writer, value); } writer.directTo(array); } - public void convertTo(final OutputStream out, final Object value) { - if (value == null) { - configWrite(new JsonStreamWriter(tiny, out)).writeNull(); - } else { - convertTo(out, value.getClass(), value); - } - } - public void convertTo(final OutputStream out, final Type type, final Object value) { - if (type == null) { - return; - } if (value == null) { configWrite(new JsonStreamWriter(tiny, out)).writeNull(); } else { + final Type t = type == null ? value.getClass() : type; JsonStreamWriter writer = configWrite(new JsonStreamWriter(tiny, out)); Encodeable encoder = this.lastConvertEncodeable; - if (encoder == null || encoder.getType() != type) { - encoder = factory.loadEncoder(type); + if (encoder == null || encoder.getType() != t) { + encoder = factory.loadEncoder(t); this.lastConvertEncodeable = encoder; } if (encoder.specifyable()) { - writer.specificObjectType(type); + writer.specificObjectType(t); } encoder.convertTo(writer, value); } } @Override - public ByteBuffer[] convertTo(final Supplier supplier, final Object value) { + public ByteBuffer[] convertTo(final Supplier supplier, final Type type, final Object value) { if (supplier == null) { return null; } @@ -473,59 +435,26 @@ public class JsonConvert extends TextConvert { if (value == null) { out.writeNull(); } else { - factory.loadEncoder(value.getClass()).convertTo(out, value); + final Type t = type == null ? value.getClass() : type; + out.specificObjectType(t); + factory.loadEncoder(t).convertTo(out, value); } return out.toBuffers(); } - @Override - public ByteBuffer[] convertTo(final Supplier supplier, final Type type, final Object value) { - if (supplier == null || type == null) { - return null; - } - JsonByteBufferWriter out = configWrite(new JsonByteBufferWriter(tiny, supplier)); - if (value == null) { - out.writeNull(); - } else { - out.specificObjectType(type); - factory.loadEncoder(type).convertTo(out, value); - } - return out.toBuffers(); - } - - @Override - public void convertTo(final JsonWriter writer, final Object value) { - if (value == null) { - writer.writeNull(); - } else { - Class type = value.getClass(); - Encodeable encoder = this.lastConvertEncodeable; - if (encoder == null || encoder.getType() != type) { - encoder = factory.loadEncoder(type); - this.lastConvertEncodeable = encoder; - } - if (encoder.specifyable()) { - writer.specificObjectType(type); - } - encoder.convertTo(writer, value); - } - } - @Override public void convertTo(final JsonWriter writer, final Type type, final Object value) { - if (type == null) { - return; - } if (value == null) { writer.writeNull(); } else { + final Type t = type == null ? value.getClass() : type; Encodeable encoder = this.lastConvertEncodeable; - if (encoder == null || encoder.getType() != type) { - encoder = factory.loadEncoder(type); + if (encoder == null || encoder.getType() != t) { + encoder = factory.loadEncoder(t); this.lastConvertEncodeable = encoder; } if (encoder.specifyable()) { - writer.specificObjectType(type); + writer.specificObjectType(t); } encoder.convertTo(writer, value); }