protobuf
This commit is contained in:
@@ -103,10 +103,6 @@ public final class DeMember<R extends Reader, T, F> {
|
|||||||
return attribute.field().equals(name);
|
return attribute.field().equals(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
public final void read(R in, T obj) {
|
|
||||||
this.attribute.set(obj, decoder.convertFrom(in));
|
|
||||||
}
|
|
||||||
|
|
||||||
public final F read(R in) {
|
public final F read(R in) {
|
||||||
return decoder.convertFrom(in);
|
return decoder.convertFrom(in);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -376,16 +376,15 @@ public class ObjectDecoder<R extends Reader, T> implements Decodeable<R, T> {
|
|||||||
DeMemberInfo info = this.memberInfo;
|
DeMemberInfo info = this.memberInfo;
|
||||||
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;
|
|
||||||
while (in.hasNext()) {
|
while (in.hasNext()) {
|
||||||
DeMember member = in.readFieldName(info);
|
DeMember member = in.readFieldName(info);
|
||||||
in.readBlank();
|
in.readBlank();
|
||||||
if (member == null) {
|
if (member == null) {
|
||||||
in.skipValue(); // 跳过不存在的属性的值
|
in.skipValue(); // 跳过不存在的属性的值
|
||||||
} else {
|
} else {
|
||||||
readDeMemberValue(in, member, result, first);
|
Object val = readDeMemberValue(in, member);
|
||||||
|
member.getAttribute().set(result, val);
|
||||||
}
|
}
|
||||||
first = false;
|
|
||||||
}
|
}
|
||||||
in.readObjectE(typeClass);
|
in.readObjectE(typeClass);
|
||||||
return result;
|
return result;
|
||||||
@@ -394,14 +393,13 @@ public class ObjectDecoder<R extends Reader, T> implements Decodeable<R, T> {
|
|||||||
final Object[] constructorParams = new Object[constructorFields.length];
|
final Object[] constructorParams = new Object[constructorFields.length];
|
||||||
final Object[][] otherParams = new Object[info.length()][2];
|
final Object[][] otherParams = new Object[info.length()][2];
|
||||||
int oc = 0;
|
int oc = 0;
|
||||||
boolean first = true;
|
|
||||||
while (in.hasNext()) {
|
while (in.hasNext()) {
|
||||||
DeMember member = in.readFieldName(info);
|
DeMember member = in.readFieldName(info);
|
||||||
in.readBlank();
|
in.readBlank();
|
||||||
if (member == null) {
|
if (member == null) {
|
||||||
in.skipValue(); // 跳过不存在的属性的值
|
in.skipValue(); // 跳过不存在的属性的值
|
||||||
} else {
|
} else {
|
||||||
Object val = readDeMemberValue(in, member, first);
|
Object val = readDeMemberValue(in, member);
|
||||||
boolean flag = true;
|
boolean flag = true;
|
||||||
for (int i = 0; i < constructorFields.length; i++) {
|
for (int i = 0; i < constructorFields.length; i++) {
|
||||||
if (member == constructorFields[i]) {
|
if (member == constructorFields[i]) {
|
||||||
@@ -414,7 +412,6 @@ public class ObjectDecoder<R extends Reader, T> implements Decodeable<R, T> {
|
|||||||
otherParams[oc++] = new Object[] {member.attribute, val};
|
otherParams[oc++] = new Object[] {member.attribute, val};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
first = false;
|
|
||||||
}
|
}
|
||||||
in.readObjectE(typeClass);
|
in.readObjectE(typeClass);
|
||||||
if (this.creator == null) {
|
if (this.creator == null) {
|
||||||
@@ -437,14 +434,10 @@ public class ObjectDecoder<R extends Reader, T> implements Decodeable<R, T> {
|
|||||||
// do nothing
|
// do nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Object readDeMemberValue(R in, DeMember member, boolean first) {
|
protected Object readDeMemberValue(R in, DeMember member) {
|
||||||
return member.read(in);
|
return member.read(in);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void readDeMemberValue(R in, DeMember member, T result, boolean first) {
|
|
||||||
member.read(in, result);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------------
|
||||||
protected void setTag(DeMember member, int tag) {
|
protected void setTag(DeMember member, int tag) {
|
||||||
member.tag = tag;
|
member.tag = tag;
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ public class ProtobufObjectDecoder<T> extends ObjectDecoder<ProtobufReader, T>
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Object readDeMemberValue(ProtobufReader in, DeMember member, boolean first) {
|
protected Object readDeMemberValue(ProtobufReader in, DeMember member) {
|
||||||
Decodeable decoder = member.getDecoder();
|
Decodeable decoder = member.getDecoder();
|
||||||
if (decoder instanceof ProtobufTagDecodeable) {
|
if (decoder instanceof ProtobufTagDecodeable) {
|
||||||
return ((ProtobufTagDecodeable) decoder).convertFrom(in, member);
|
return ((ProtobufTagDecodeable) decoder).convertFrom(in, member);
|
||||||
@@ -54,15 +54,4 @@ public class ProtobufObjectDecoder<T> extends ObjectDecoder<ProtobufReader, T>
|
|||||||
return member.read(in);
|
return member.read(in);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void readDeMemberValue(ProtobufReader in, DeMember member, T result, boolean first) {
|
|
||||||
Decodeable decoder = member.getDecoder();
|
|
||||||
if (decoder instanceof ProtobufTagDecodeable) {
|
|
||||||
Object val = ((ProtobufTagDecodeable) decoder).convertFrom(in, member);
|
|
||||||
member.getAttribute().set(result, val);
|
|
||||||
} else {
|
|
||||||
member.read(in, result);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user