diff --git a/src/org/redkale/convert/ArrayDecoder.java b/src/org/redkale/convert/ArrayDecoder.java index 84136ba8f..7df587e5a 100644 --- a/src/org/redkale/convert/ArrayDecoder.java +++ b/src/org/redkale/convert/ArrayDecoder.java @@ -62,6 +62,10 @@ public class ArrayDecoder implements Decodeable { @Override public T[] convertFrom(Reader in) { + return convertFrom(in, null); + } + + public T[] convertFrom(Reader in, DeMember member) { int len = in.readArrayB(); int contentLength = -1; if (len == Reader.SIGN_NULL) return null; @@ -85,6 +89,7 @@ public class ArrayDecoder implements Decodeable { if (len == Reader.SIGN_NOLENGTH) { int startPosition = in.position(); while (in.hasNext(startPosition, contentLength)) { + readMember(in, member); result.add(localdecoder.convertFrom(in)); } } else { @@ -97,6 +102,9 @@ public class ArrayDecoder implements Decodeable { return result.toArray(rs); } + protected void readMember(Reader in, DeMember member) { + } + @Override public String toString() { return this.getClass().getSimpleName() + "{componentType:" + this.componentType + ", decoder:" + this.decoder + "}"; diff --git a/src/org/redkale/convert/ArrayEncoder.java b/src/org/redkale/convert/ArrayEncoder.java index 7a25161d3..9a051c6b4 100644 --- a/src/org/redkale/convert/ArrayEncoder.java +++ b/src/org/redkale/convert/ArrayEncoder.java @@ -57,6 +57,10 @@ public class ArrayEncoder implements Encodeable { @Override public void convertTo(Writer out, T[] value) { + convertTo(out, null, value); + } + + public void convertTo(Writer out, EnMember member, T[] value) { if (value == null) { out.writeNull(); return; @@ -82,13 +86,17 @@ public class ArrayEncoder implements Encodeable { boolean first = true; for (Object v : value) { if (!first) out.writeArrayMark(); - ((v != null && (v.getClass() == comp || out.specify() == comp)) ? encoder : anyEncoder).convertTo(out, v); + writeValue(out, member, ((v != null && (v.getClass() == comp || out.specify() == comp)) ? encoder : anyEncoder), v); if (first) first = false; } } out.writeArrayE(); } + protected void writeValue(Writer out, EnMember member, Encodeable encoder, Object value) { + encoder.convertTo(out, value); + } + @Override public String toString() { return this.getClass().getSimpleName() + "{componentType:" + this.componentType + ", encoder:" + this.encoder + "}"; diff --git a/src/org/redkale/convert/CollectionDecoder.java b/src/org/redkale/convert/CollectionDecoder.java index 304c03c1f..0458d8ed7 100644 --- a/src/org/redkale/convert/CollectionDecoder.java +++ b/src/org/redkale/convert/CollectionDecoder.java @@ -62,6 +62,10 @@ public class CollectionDecoder implements Decodeable> { @Override public Collection convertFrom(Reader in) { + return convertFrom(in, null); + } + + public Collection convertFrom(Reader in, DeMember member) { int len = in.readArrayB(); int contentLength = -1; if (len == Reader.SIGN_NULL) return null; @@ -85,6 +89,7 @@ public class CollectionDecoder implements Decodeable> { if (len == Reader.SIGN_NOLENGTH) { int startPosition = in.position(); while (in.hasNext(startPosition, contentLength)) { + readMember(in, member); result.add(localdecoder.convertFrom(in)); } } else { @@ -96,6 +101,9 @@ public class CollectionDecoder implements Decodeable> { return result; } + protected void readMember(Reader in, DeMember member) { + } + @Override public Type getType() { return type; diff --git a/src/org/redkale/convert/CollectionEncoder.java b/src/org/redkale/convert/CollectionEncoder.java index 46b32cfd4..a15b77878 100644 --- a/src/org/redkale/convert/CollectionEncoder.java +++ b/src/org/redkale/convert/CollectionEncoder.java @@ -52,6 +52,10 @@ public class CollectionEncoder implements Encodeable> { @Override public void convertTo(Writer out, Collection value) { + convertTo(out, null, value); + } + + public void convertTo(Writer out, EnMember member, Collection value) { if (value == null) { out.writeNull(); return; @@ -76,13 +80,17 @@ public class CollectionEncoder implements Encodeable> { boolean first = true; for (Object v : value) { if (!first) out.writeArrayMark(); - encoder.convertTo(out, v); + writeValue(out, member, v); if (first) first = false; } } out.writeArrayE(); } + protected void writeValue(Writer out, EnMember member, Object value) { + encoder.convertTo(out, value); + } + @Override public Type getType() { return type; diff --git a/src/org/redkale/convert/MapDecoder.java b/src/org/redkale/convert/MapDecoder.java index 9271ff39a..c6e0886c5 100644 --- a/src/org/redkale/convert/MapDecoder.java +++ b/src/org/redkale/convert/MapDecoder.java @@ -76,6 +76,10 @@ public class MapDecoder implements Decodeable> { @Override public Map convertFrom(Reader in) { + return convertFrom(in, null); + } + + public Map convertFrom(Reader in, DeMember member) { if (this.keyDecoder == null || this.valueDecoder == null) { if (!this.inited) { synchronized (lock) { @@ -98,15 +102,19 @@ public class MapDecoder implements Decodeable> { if (len == Reader.SIGN_NOLENGTH) { int startPosition = in.position(); while (in.hasNext(startPosition, contentLength)) { + readKeyMember(in, member); K key = keyDecoder.convertFrom(in); in.readBlank(); + readValueMember(in, member); V value = valueDecoder.convertFrom(in); result.put(key, value); } } else { for (int i = 0; i < len; i++) { + readKeyMember(in, member); K key = keyDecoder.convertFrom(in); in.readBlank(); + readValueMember(in, member); V value = valueDecoder.convertFrom(in); result.put(key, value); } @@ -115,6 +123,12 @@ public class MapDecoder implements Decodeable> { return result; } + protected void readKeyMember(Reader in, DeMember member) { + } + + protected void readValueMember(Reader in, DeMember member) { + } + @Override public Type getType() { return this.type; diff --git a/src/org/redkale/convert/MapEncoder.java b/src/org/redkale/convert/MapEncoder.java index 97e9e47d7..9809c3745 100644 --- a/src/org/redkale/convert/MapEncoder.java +++ b/src/org/redkale/convert/MapEncoder.java @@ -53,6 +53,10 @@ public class MapEncoder implements Encodeable> { @Override public void convertTo(Writer out, Map value) { + convertTo(out, null, value); + } + + public void convertTo(Writer out, EnMember member, Map value) { final Map values = value; if (values == null) { out.writeNull(); @@ -74,15 +78,23 @@ public class MapEncoder implements Encodeable> { boolean first = true; for (Map.Entry en : values.entrySet()) { if (!first) out.writeArrayMark(); - this.keyencoder.convertTo(out, en.getKey()); + writeKey(out, member, en.getKey()); out.writeMapMark(); - this.valencoder.convertTo(out, en.getValue()); + writeValue(out, member, en.getValue()); if (first) first = false; } } out.writeMapE(); } + protected void writeKey(Writer out, EnMember member, K key) { + keyencoder.convertTo(out, key); + } + + protected void writeValue(Writer out, EnMember member, V value) { + valencoder.convertTo(out, value); + } + @Override public Type getType() { return type; diff --git a/src/org/redkale/convert/StreamDecoder.java b/src/org/redkale/convert/StreamDecoder.java index 1570477dc..7bf2781f8 100644 --- a/src/org/redkale/convert/StreamDecoder.java +++ b/src/org/redkale/convert/StreamDecoder.java @@ -58,6 +58,10 @@ public class StreamDecoder implements Decodeable> { @Override public Stream convertFrom(Reader in) { + return convertFrom(in, null); + } + + public Stream convertFrom(Reader in, DeMember member) { int len = in.readArrayB(); int contentLength = -1; if (len == Reader.SIGN_NULL) return null; @@ -81,6 +85,7 @@ public class StreamDecoder implements Decodeable> { if (len == Reader.SIGN_NOLENGTH) { int startPosition = in.position(); while (in.hasNext(startPosition, contentLength)) { + readMember(in, member); result.add(localdecoder.convertFrom(in)); } } else { @@ -92,6 +97,9 @@ public class StreamDecoder implements Decodeable> { return result.stream(); } + protected void readMember(Reader in, DeMember member) { + } + @Override public Type getType() { return type; diff --git a/src/org/redkale/convert/StreamEncoder.java b/src/org/redkale/convert/StreamEncoder.java index 2183431c7..58ccd48cf 100644 --- a/src/org/redkale/convert/StreamEncoder.java +++ b/src/org/redkale/convert/StreamEncoder.java @@ -52,6 +52,10 @@ public class StreamEncoder implements Encodeable> { @Override public void convertTo(Writer out, Stream value) { + convertTo(out, null, value); + } + + public void convertTo(Writer out, EnMember member, Stream value) { if (value == null) { out.writeNull(); return; @@ -77,13 +81,17 @@ public class StreamEncoder implements Encodeable> { boolean first = true; for (Object v : array) { if (!first) out.writeArrayMark(); - encoder.convertTo(out, v); + writeValue(out, member, v); if (first) first = false; } } out.writeArrayE(); } + protected void writeValue(Writer out, EnMember member, Object value) { + encoder.convertTo(out, value); + } + @Override public Type getType() { return type;