This commit is contained in:
Redkale
2018-07-21 14:21:50 +08:00
parent 0f2474386c
commit 00a12d8113
8 changed files with 79 additions and 5 deletions

View File

@@ -62,6 +62,10 @@ public class ArrayDecoder<T> implements Decodeable<Reader, T[]> {
@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<T> implements Decodeable<Reader, T[]> {
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<T> implements Decodeable<Reader, T[]> {
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 + "}";

View File

@@ -57,6 +57,10 @@ public class ArrayEncoder<T> implements Encodeable<Writer, T[]> {
@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<T> implements Encodeable<Writer, T[]> {
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<Writer, Object> encoder, Object value) {
encoder.convertTo(out, value);
}
@Override
public String toString() {
return this.getClass().getSimpleName() + "{componentType:" + this.componentType + ", encoder:" + this.encoder + "}";

View File

@@ -62,6 +62,10 @@ public class CollectionDecoder<T> implements Decodeable<Reader, Collection<T>> {
@Override
public Collection<T> convertFrom(Reader in) {
return convertFrom(in, null);
}
public Collection<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 CollectionDecoder<T> implements Decodeable<Reader, Collection<T>> {
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<T> implements Decodeable<Reader, Collection<T>> {
return result;
}
protected void readMember(Reader in, DeMember member) {
}
@Override
public Type getType() {
return type;

View File

@@ -52,6 +52,10 @@ public class CollectionEncoder<T> implements Encodeable<Writer, Collection<T>> {
@Override
public void convertTo(Writer out, Collection<T> value) {
convertTo(out, null, value);
}
public void convertTo(Writer out, EnMember member, Collection<T> value) {
if (value == null) {
out.writeNull();
return;
@@ -76,13 +80,17 @@ public class CollectionEncoder<T> implements Encodeable<Writer, Collection<T>> {
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;

View File

@@ -76,6 +76,10 @@ public class MapDecoder<K, V> implements Decodeable<Reader, Map<K, V>> {
@Override
public Map<K, V> convertFrom(Reader in) {
return convertFrom(in, null);
}
public Map<K, V> convertFrom(Reader in, DeMember member) {
if (this.keyDecoder == null || this.valueDecoder == null) {
if (!this.inited) {
synchronized (lock) {
@@ -98,15 +102,19 @@ public class MapDecoder<K, V> implements Decodeable<Reader, Map<K, V>> {
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<K, V> implements Decodeable<Reader, Map<K, V>> {
return result;
}
protected void readKeyMember(Reader in, DeMember member) {
}
protected void readValueMember(Reader in, DeMember member) {
}
@Override
public Type getType() {
return this.type;

View File

@@ -53,6 +53,10 @@ public class MapEncoder<K, V> implements Encodeable<Writer, Map<K, V>> {
@Override
public void convertTo(Writer out, Map<K, V> value) {
convertTo(out, null, value);
}
public void convertTo(Writer out, EnMember member, Map<K, V> value) {
final Map<K, V> values = value;
if (values == null) {
out.writeNull();
@@ -74,15 +78,23 @@ public class MapEncoder<K, V> implements Encodeable<Writer, Map<K, V>> {
boolean first = true;
for (Map.Entry<K, V> 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;

View File

@@ -58,6 +58,10 @@ public class StreamDecoder<T> implements Decodeable<Reader, Stream<T>> {
@Override
public Stream<T> convertFrom(Reader in) {
return convertFrom(in, null);
}
public Stream<T> 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<T> implements Decodeable<Reader, Stream<T>> {
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<T> implements Decodeable<Reader, Stream<T>> {
return result.stream();
}
protected void readMember(Reader in, DeMember member) {
}
@Override
public Type getType() {
return type;

View File

@@ -52,6 +52,10 @@ public class StreamEncoder<T> implements Encodeable<Writer, Stream<T>> {
@Override
public void convertTo(Writer out, Stream<T> value) {
convertTo(out, null, value);
}
public void convertTo(Writer out, EnMember member, Stream<T> value) {
if (value == null) {
out.writeNull();
return;
@@ -77,13 +81,17 @@ public class StreamEncoder<T> implements Encodeable<Writer, Stream<T>> {
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;