This commit is contained in:
@@ -222,9 +222,10 @@ public class ObjectDecoder<R extends Reader, T> implements Decodeable<R, T> {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public T convertFrom(final R in) {
|
public T convertFrom(final R in) {
|
||||||
final String clazz = in.readObjectB(typeClass);
|
R objin = objectReader(in);
|
||||||
|
final String clazz = objin.readObjectB(typeClass);
|
||||||
if (clazz == null) return null;
|
if (clazz == null) return null;
|
||||||
if (!clazz.isEmpty()) return (T) factory.loadDecoder(factory.getEntityAlias(clazz)).convertFrom(in);
|
if (!clazz.isEmpty()) return (T) factory.loadDecoder(factory.getEntityAlias(clazz)).convertFrom(objin);
|
||||||
if (!this.inited) {
|
if (!this.inited) {
|
||||||
synchronized (lock) {
|
synchronized (lock) {
|
||||||
try {
|
try {
|
||||||
@@ -242,17 +243,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 == null ? null : this.creator.create();
|
final T result = this.creator == null ? null : this.creator.create();
|
||||||
boolean first = true;
|
boolean first = true;
|
||||||
while (hasNext(in, first)) {
|
while (hasNext(objin, first)) {
|
||||||
DeMember member = in.readFieldName(members);
|
DeMember member = objin.readFieldName(members);
|
||||||
in.readBlank();
|
objin.readBlank();
|
||||||
if (member == null) {
|
if (member == null) {
|
||||||
in.skipValue(); //跳过不存在的属性的值
|
objin.skipValue(); //跳过不存在的属性的值
|
||||||
} else {
|
} else {
|
||||||
readMemberValue(in, member, result, first);
|
readMemberValue(objin, member, result, first);
|
||||||
}
|
}
|
||||||
first = false;
|
first = false;
|
||||||
}
|
}
|
||||||
in.readObjectE(typeClass);
|
objin.readObjectE(typeClass);
|
||||||
return result;
|
return result;
|
||||||
} else { //带参数的构造函数
|
} else { //带参数的构造函数
|
||||||
final DeMember<R, T, ?>[] fields = this.creatorConstructorMembers;
|
final DeMember<R, T, ?>[] fields = this.creatorConstructorMembers;
|
||||||
@@ -260,13 +261,13 @@ public class ObjectDecoder<R extends Reader, T> implements Decodeable<R, T> {
|
|||||||
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;
|
boolean first = true;
|
||||||
while (hasNext(in, first)) {
|
while (hasNext(objin, first)) {
|
||||||
DeMember member = in.readFieldName(members);
|
DeMember member = objin.readFieldName(members);
|
||||||
in.readBlank();
|
objin.readBlank();
|
||||||
if (member == null) {
|
if (member == null) {
|
||||||
in.skipValue(); //跳过不存在的属性的值
|
objin.skipValue(); //跳过不存在的属性的值
|
||||||
} else {
|
} else {
|
||||||
Object val = readMemberValue(in, member, first);
|
Object val = readMemberValue(objin, 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]) {
|
||||||
@@ -280,7 +281,7 @@ public class ObjectDecoder<R extends Reader, T> implements Decodeable<R, T> {
|
|||||||
}
|
}
|
||||||
first = false;
|
first = false;
|
||||||
}
|
}
|
||||||
in.readObjectE(typeClass);
|
objin.readObjectE(typeClass);
|
||||||
if (this.creator == null) return null;
|
if (this.creator == null) return null;
|
||||||
final T result = this.creator.create(constructorParams);
|
final T result = this.creator.create(constructorParams);
|
||||||
for (int i = 0; i < oc; i++) {
|
for (int i = 0; i < oc; i++) {
|
||||||
@@ -290,6 +291,10 @@ public class ObjectDecoder<R extends Reader, T> implements Decodeable<R, T> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected R objectReader(R in) {
|
||||||
|
return in;
|
||||||
|
}
|
||||||
|
|
||||||
protected boolean hasNext(R in, boolean first) {
|
protected boolean hasNext(R in, boolean first) {
|
||||||
return in.hasNext();
|
return in.hasNext();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -163,25 +163,30 @@ public class ObjectEncoder<W extends Writer, T> implements Encodeable<W, T> {
|
|||||||
factory.loadEncoder(clz).convertTo(out, value);
|
factory.loadEncoder(clz).convertTo(out, value);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (out.writeObjectB(value) < 0) {
|
W objout = objectWriter(out, value);
|
||||||
|
if (objout.writeObjectB(value) < 0) {
|
||||||
int maxPosition = 0;
|
int maxPosition = 0;
|
||||||
for (EnMember member : members) {
|
for (EnMember member : members) {
|
||||||
maxPosition = member.getPosition();
|
maxPosition = member.getPosition();
|
||||||
out.writeObjectField(member, value);
|
objout.writeObjectField(member, value);
|
||||||
}
|
}
|
||||||
if (out.objExtFunc != null) {
|
if (objout.objExtFunc != null) {
|
||||||
ConvertField[] extFields = out.objExtFunc.apply(value);
|
ConvertField[] extFields = objout.objExtFunc.apply(value);
|
||||||
if (extFields != null) {
|
if (extFields != null) {
|
||||||
Encodeable<W, ?> anyEncoder = factory.getAnyEncoder();
|
Encodeable<W, ?> anyEncoder = factory.getAnyEncoder();
|
||||||
for (ConvertField en : extFields) {
|
for (ConvertField en : extFields) {
|
||||||
if (en == null) continue;
|
if (en == null) continue;
|
||||||
maxPosition++;
|
maxPosition++;
|
||||||
out.writeObjectField(en.getName(), en.getType(), Math.max(en.getPosition(), maxPosition), anyEncoder, en.getValue());
|
objout.writeObjectField(en.getName(), en.getType(), Math.max(en.getPosition(), maxPosition), anyEncoder, en.getValue());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
out.writeObjectE(value);
|
objout.writeObjectE(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected W objectWriter(W out, T value) {
|
||||||
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user