diff --git a/src/org/redkale/convert/ObjectDecoder.java b/src/org/redkale/convert/ObjectDecoder.java index 539da6f50..b1b266dee 100644 --- a/src/org/redkale/convert/ObjectDecoder.java +++ b/src/org/redkale/convert/ObjectDecoder.java @@ -222,9 +222,10 @@ public class ObjectDecoder implements Decodeable { */ @Override 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.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) { synchronized (lock) { try { @@ -242,17 +243,17 @@ public class ObjectDecoder implements Decodeable { if (this.creatorConstructorMembers == null) { //空构造函数 final T result = this.creator == null ? null : this.creator.create(); boolean first = true; - while (hasNext(in, first)) { - DeMember member = in.readFieldName(members); - in.readBlank(); + while (hasNext(objin, first)) { + DeMember member = objin.readFieldName(members); + objin.readBlank(); if (member == null) { - in.skipValue(); //跳过不存在的属性的值 + objin.skipValue(); //跳过不存在的属性的值 } else { - readMemberValue(in, member, result, first); + readMemberValue(objin, member, result, first); } first = false; } - in.readObjectE(typeClass); + objin.readObjectE(typeClass); return result; } else { //带参数的构造函数 final DeMember[] fields = this.creatorConstructorMembers; @@ -260,13 +261,13 @@ public class ObjectDecoder implements Decodeable { final Object[][] otherParams = new Object[this.members.length][2]; int oc = 0; boolean first = true; - while (hasNext(in, first)) { - DeMember member = in.readFieldName(members); - in.readBlank(); + while (hasNext(objin, first)) { + DeMember member = objin.readFieldName(members); + objin.readBlank(); if (member == null) { - in.skipValue(); //跳过不存在的属性的值 + objin.skipValue(); //跳过不存在的属性的值 } else { - Object val = readMemberValue(in, member, first); + Object val = readMemberValue(objin, member, first); boolean flag = true; for (int i = 0; i < fields.length; i++) { if (member == fields[i]) { @@ -280,7 +281,7 @@ public class ObjectDecoder implements Decodeable { } first = false; } - in.readObjectE(typeClass); + objin.readObjectE(typeClass); if (this.creator == null) return null; final T result = this.creator.create(constructorParams); for (int i = 0; i < oc; i++) { @@ -290,6 +291,10 @@ public class ObjectDecoder implements Decodeable { } } + protected R objectReader(R in) { + return in; + } + protected boolean hasNext(R in, boolean first) { return in.hasNext(); } diff --git a/src/org/redkale/convert/ObjectEncoder.java b/src/org/redkale/convert/ObjectEncoder.java index f5930458a..dd6e64a8c 100644 --- a/src/org/redkale/convert/ObjectEncoder.java +++ b/src/org/redkale/convert/ObjectEncoder.java @@ -163,25 +163,30 @@ public class ObjectEncoder implements Encodeable { factory.loadEncoder(clz).convertTo(out, value); return; } - if (out.writeObjectB(value) < 0) { + W objout = objectWriter(out, value); + if (objout.writeObjectB(value) < 0) { int maxPosition = 0; for (EnMember member : members) { maxPosition = member.getPosition(); - out.writeObjectField(member, value); + objout.writeObjectField(member, value); } - if (out.objExtFunc != null) { - ConvertField[] extFields = out.objExtFunc.apply(value); + if (objout.objExtFunc != null) { + ConvertField[] extFields = objout.objExtFunc.apply(value); if (extFields != null) { Encodeable anyEncoder = factory.getAnyEncoder(); for (ConvertField en : extFields) { if (en == null) continue; 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