Convert优化
This commit is contained in:
@@ -28,7 +28,9 @@ public abstract class BinaryConvert<R extends Reader, W extends Writer> 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);
|
||||
|
||||
|
||||
@@ -79,23 +79,33 @@ public abstract class Convert<R extends Reader, W extends Writer> {
|
||||
|
||||
public abstract <T> 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<ByteBuffer> supplier, final Object value);
|
||||
public final ByteBuffer[] convertTo(final Supplier<ByteBuffer> supplier, final Object value) {
|
||||
return convertTo(supplier, (Type) null, value);
|
||||
}
|
||||
|
||||
public abstract ByteBuffer[] convertTo(final Supplier<ByteBuffer> supplier, final Type type, final Object value);
|
||||
|
||||
|
||||
@@ -30,7 +30,9 @@ public abstract class TextConvert<R extends Reader, W extends Writer> extends Co
|
||||
|
||||
public abstract <T> 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);
|
||||
|
||||
|
||||
@@ -202,7 +202,7 @@ public class BsonConvert extends BinaryConvert<BsonReader, BsonWriter> {
|
||||
|
||||
//------------------------------ 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<BsonReader, BsonWriter> {
|
||||
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<BsonReader, BsonWriter> {
|
||||
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<ByteBuffer> 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<ByteBuffer> 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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -324,30 +324,20 @@ public class JsonConvert extends TextConvert<JsonReader, JsonWriter> {
|
||||
}
|
||||
|
||||
//------------------------------ 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<JsonReader, JsonWriter> {
|
||||
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<JsonReader, JsonWriter> {
|
||||
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<ByteBuffer> supplier, final Object value) {
|
||||
public ByteBuffer[] convertTo(final Supplier<ByteBuffer> supplier, final Type type, final Object value) {
|
||||
if (supplier == null) {
|
||||
return null;
|
||||
}
|
||||
@@ -473,59 +435,26 @@ public class JsonConvert extends TextConvert<JsonReader, JsonWriter> {
|
||||
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<ByteBuffer> 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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user