This commit is contained in:
@@ -96,7 +96,6 @@ public class ArrayDecoder<T> implements Decodeable<Reader, T[]> {
|
|||||||
} else {
|
} else {
|
||||||
for (int i = 0; i < len; i++) {
|
for (int i = 0; i < len; i++) {
|
||||||
result.add(localdecoder.convertFrom(in));
|
result.add(localdecoder.convertFrom(in));
|
||||||
first = false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
in.readArrayE();
|
in.readArrayE();
|
||||||
|
|||||||
@@ -86,14 +86,14 @@ public class ArrayEncoder<T> implements Encodeable<Writer, T[]> {
|
|||||||
boolean first = true;
|
boolean first = true;
|
||||||
for (Object v : value) {
|
for (Object v : value) {
|
||||||
if (!first) out.writeArrayMark();
|
if (!first) out.writeArrayMark();
|
||||||
writeValue(out, member, ((v != null && (v.getClass() == comp || out.specify() == comp)) ? encoder : anyEncoder), v);
|
writeMemberValue(out, member, ((v != null && (v.getClass() == comp || out.specify() == comp)) ? encoder : anyEncoder), v, first);
|
||||||
if (first) first = false;
|
if (first) first = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
out.writeArrayE();
|
out.writeArrayE();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void writeValue(Writer out, EnMember member, Encodeable<Writer, Object> encoder, Object value) {
|
protected void writeMemberValue(Writer out, EnMember member, Encodeable<Writer, Object> encoder, Object value, boolean first) {
|
||||||
encoder.convertTo(out, value);
|
encoder.convertTo(out, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -86,11 +86,12 @@ public class CollectionDecoder<T> implements Decodeable<Reader, Collection<T>> {
|
|||||||
}
|
}
|
||||||
final Decodeable<Reader, T> localdecoder = this.decoder;
|
final Decodeable<Reader, T> localdecoder = this.decoder;
|
||||||
final Collection<T> result = this.creator.create();
|
final Collection<T> result = this.creator.create();
|
||||||
|
boolean first = true;
|
||||||
if (len == Reader.SIGN_NOLENGTH) {
|
if (len == Reader.SIGN_NOLENGTH) {
|
||||||
int startPosition = in.position();
|
int startPosition = in.position();
|
||||||
while (in.hasNext(startPosition, contentLength)) {
|
while (in.hasNext(startPosition, contentLength)) {
|
||||||
readMember(in, member);
|
result.add(readMemberValue(in, member, first));
|
||||||
result.add(localdecoder.convertFrom(in));
|
first = false;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (int i = 0; i < len; i++) {
|
for (int i = 0; i < len; i++) {
|
||||||
@@ -101,7 +102,8 @@ public class CollectionDecoder<T> implements Decodeable<Reader, Collection<T>> {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void readMember(Reader in, DeMember member) {
|
protected T readMemberValue(Reader in, DeMember member, boolean first) {
|
||||||
|
return this.decoder.convertFrom(in);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -99,34 +99,35 @@ public class MapDecoder<K, V> implements Decodeable<Reader, Map<K, V>> {
|
|||||||
len = Reader.SIGN_NOLENGTH;
|
len = Reader.SIGN_NOLENGTH;
|
||||||
}
|
}
|
||||||
final Map<K, V> result = this.creator.create();
|
final Map<K, V> result = this.creator.create();
|
||||||
|
boolean first = true;
|
||||||
if (len == Reader.SIGN_NOLENGTH) {
|
if (len == Reader.SIGN_NOLENGTH) {
|
||||||
int startPosition = in.position();
|
int startPosition = in.position();
|
||||||
while (in.hasNext(startPosition, contentLength)) {
|
while (in.hasNext(startPosition, contentLength)) {
|
||||||
readKeyMember(in, member);
|
K key = readKeyMember(in, member, first);
|
||||||
K key = keyDecoder.convertFrom(in);
|
|
||||||
in.readBlank();
|
in.readBlank();
|
||||||
readValueMember(in, member);
|
V value = readValueMember(in, member, first);
|
||||||
V value = valueDecoder.convertFrom(in);
|
|
||||||
result.put(key, value);
|
result.put(key, value);
|
||||||
|
first = false;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (int i = 0; i < len; i++) {
|
for (int i = 0; i < len; i++) {
|
||||||
readKeyMember(in, member);
|
K key = readKeyMember(in, member, first);
|
||||||
K key = keyDecoder.convertFrom(in);
|
|
||||||
in.readBlank();
|
in.readBlank();
|
||||||
readValueMember(in, member);
|
V value = readValueMember(in, member, first);
|
||||||
V value = valueDecoder.convertFrom(in);
|
|
||||||
result.put(key, value);
|
result.put(key, value);
|
||||||
|
first = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
in.readMapE();
|
in.readMapE();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void readKeyMember(Reader in, DeMember member) {
|
protected K readKeyMember(Reader in, DeMember member, boolean first) {
|
||||||
|
return keyDecoder.convertFrom(in);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void readValueMember(Reader in, DeMember member) {
|
protected V readValueMember(Reader in, DeMember member, boolean first) {
|
||||||
|
return valueDecoder.convertFrom(in);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -78,20 +78,16 @@ public class MapEncoder<K, V> implements Encodeable<Writer, Map<K, V>> {
|
|||||||
boolean first = true;
|
boolean first = true;
|
||||||
for (Map.Entry<K, V> en : values.entrySet()) {
|
for (Map.Entry<K, V> en : values.entrySet()) {
|
||||||
if (!first) out.writeArrayMark();
|
if (!first) out.writeArrayMark();
|
||||||
writeKey(out, member, en.getKey());
|
writeMemberValue(out, member, en.getKey(), en.getValue(),first);
|
||||||
out.writeMapMark();
|
|
||||||
writeValue(out, member, en.getValue());
|
|
||||||
if (first) first = false;
|
if (first) first = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
out.writeMapE();
|
out.writeMapE();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void writeKey(Writer out, EnMember member, K key) {
|
protected void writeMemberValue(Writer out, EnMember member, K key, V value,boolean first) {
|
||||||
keyencoder.convertTo(out, key);
|
keyencoder.convertTo(out, key);
|
||||||
}
|
out.writeMapMark();
|
||||||
|
|
||||||
protected void writeValue(Writer out, EnMember member, V value) {
|
|
||||||
valencoder.convertTo(out, value);
|
valencoder.convertTo(out, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -221,15 +221,17 @@ public class ObjectDecoder<R extends Reader, T> implements Decodeable<R, T> {
|
|||||||
}
|
}
|
||||||
if (this.creatorConstructorMembers == null) { //空构造函数
|
if (this.creatorConstructorMembers == null) { //空构造函数
|
||||||
final T result = this.creator.create();
|
final T result = this.creator.create();
|
||||||
|
boolean first = true;
|
||||||
while (hasNext(in)) {
|
while (hasNext(in)) {
|
||||||
DeMember member = in.readFieldName(members);
|
DeMember member = in.readFieldName(members);
|
||||||
in.readBlank();
|
in.readBlank();
|
||||||
if (member == null) {
|
if (member == null) {
|
||||||
in.skipValue(); //跳过不存在的属性的值
|
in.skipValue(); //跳过不存在的属性的值
|
||||||
} else {
|
} else {
|
||||||
readMemberValue(in, member, result);
|
readMemberValue(in, member, result, first);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
first = false;
|
||||||
in.readObjectE(typeClass);
|
in.readObjectE(typeClass);
|
||||||
return result;
|
return result;
|
||||||
} else { //带参数的构造函数
|
} else { //带参数的构造函数
|
||||||
@@ -237,13 +239,14 @@ public class ObjectDecoder<R extends Reader, T> implements Decodeable<R, T> {
|
|||||||
final Object[] constructorParams = new Object[fields.length];
|
final Object[] constructorParams = new Object[fields.length];
|
||||||
final Object[][] otherParams = new Object[this.members.length][2];
|
final Object[][] otherParams = new Object[this.members.length][2];
|
||||||
int oc = 0;
|
int oc = 0;
|
||||||
|
boolean first = true;
|
||||||
while (hasNext(in)) {
|
while (hasNext(in)) {
|
||||||
DeMember member = in.readFieldName(members);
|
DeMember member = in.readFieldName(members);
|
||||||
in.readBlank();
|
in.readBlank();
|
||||||
if (member == null) {
|
if (member == null) {
|
||||||
in.skipValue(); //跳过不存在的属性的值
|
in.skipValue(); //跳过不存在的属性的值
|
||||||
} else {
|
} else {
|
||||||
Object val = readMemberValue(in, member);
|
Object val = readMemberValue(in, member, first);
|
||||||
boolean flag = true;
|
boolean flag = true;
|
||||||
for (int i = 0; i < fields.length; i++) {
|
for (int i = 0; i < fields.length; i++) {
|
||||||
if (member == fields[i]) {
|
if (member == fields[i]) {
|
||||||
@@ -253,7 +256,9 @@ public class ObjectDecoder<R extends Reader, T> implements Decodeable<R, T> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (flag) otherParams[oc++] = new Object[]{member.attribute, val};
|
if (flag) otherParams[oc++] = new Object[]{member.attribute, val};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
first = false;
|
||||||
}
|
}
|
||||||
in.readObjectE(typeClass);
|
in.readObjectE(typeClass);
|
||||||
final T result = this.creator.create(constructorParams);
|
final T result = this.creator.create(constructorParams);
|
||||||
@@ -268,11 +273,11 @@ public class ObjectDecoder<R extends Reader, T> implements Decodeable<R, T> {
|
|||||||
return in.hasNext();
|
return in.hasNext();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Object readMemberValue(R in, DeMember member) {
|
protected Object readMemberValue(R in, DeMember member, boolean first) {
|
||||||
return member.read(in);
|
return member.read(in);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void readMemberValue(R in, DeMember member, T result) {
|
protected void readMemberValue(R in, DeMember member, T result, boolean first) {
|
||||||
member.read(in, result);
|
member.read(in, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -82,11 +82,12 @@ public class StreamDecoder<T> implements Decodeable<Reader, Stream<T>> {
|
|||||||
}
|
}
|
||||||
final Decodeable<Reader, T> localdecoder = this.decoder;
|
final Decodeable<Reader, T> localdecoder = this.decoder;
|
||||||
final List<T> result = new ArrayList();
|
final List<T> result = new ArrayList();
|
||||||
|
boolean first = true;
|
||||||
if (len == Reader.SIGN_NOLENGTH) {
|
if (len == Reader.SIGN_NOLENGTH) {
|
||||||
int startPosition = in.position();
|
int startPosition = in.position();
|
||||||
while (in.hasNext(startPosition, contentLength)) {
|
while (in.hasNext(startPosition, contentLength)) {
|
||||||
readMember(in, member);
|
result.add(readMemberValue(in, member, first));
|
||||||
result.add(localdecoder.convertFrom(in));
|
first = false;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (int i = 0; i < len; i++) {
|
for (int i = 0; i < len; i++) {
|
||||||
@@ -97,7 +98,8 @@ public class StreamDecoder<T> implements Decodeable<Reader, Stream<T>> {
|
|||||||
return result.stream();
|
return result.stream();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void readMember(Reader in, DeMember member) {
|
protected T readMemberValue(Reader in, DeMember member, boolean first) {
|
||||||
|
return this.decoder.convertFrom(in);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -81,14 +81,14 @@ public class StreamEncoder<T> implements Encodeable<Writer, Stream<T>> {
|
|||||||
boolean first = true;
|
boolean first = true;
|
||||||
for (Object v : array) {
|
for (Object v : array) {
|
||||||
if (!first) out.writeArrayMark();
|
if (!first) out.writeArrayMark();
|
||||||
writeValue(out, member, v);
|
writeMemberValue(out, member, v, first);
|
||||||
if (first) first = false;
|
if (first) first = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
out.writeArrayE();
|
out.writeArrayE();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void writeValue(Writer out, EnMember member, Object value) {
|
protected void writeMemberValue(Writer out, EnMember member, Object value, boolean first) {
|
||||||
encoder.convertTo(out, value);
|
encoder.convertTo(out, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user