DeMemberInfo
This commit is contained in:
62
src/main/java/org/redkale/convert/DeMemberInfo.java
Normal file
62
src/main/java/org/redkale/convert/DeMemberInfo.java
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2016-2116 Redkale
|
||||||
|
* All rights reserved.
|
||||||
|
*/
|
||||||
|
package org.redkale.convert;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 字段的反序列化集合操作类
|
||||||
|
*
|
||||||
|
* <p>详情见: https://redkale.org
|
||||||
|
*
|
||||||
|
* @author zhangjx
|
||||||
|
* @since 2.8.0
|
||||||
|
*/
|
||||||
|
public class DeMemberInfo {
|
||||||
|
|
||||||
|
protected final DeMember[] members;
|
||||||
|
|
||||||
|
protected final DeMemberNode memberNode;
|
||||||
|
|
||||||
|
protected final Map<String, DeMember> memberFieldMap;
|
||||||
|
|
||||||
|
protected final Map<Integer, DeMember> memberTagMap;
|
||||||
|
|
||||||
|
protected DeMemberInfo(DeMember... deMembers) {
|
||||||
|
this.members = deMembers;
|
||||||
|
this.memberFieldMap = new HashMap<>(deMembers.length);
|
||||||
|
this.memberTagMap = new HashMap<>(deMembers.length);
|
||||||
|
for (DeMember member : deMembers) {
|
||||||
|
this.memberFieldMap.put(member.getAttribute().field(), member);
|
||||||
|
this.memberTagMap.put(member.getTag(), member);
|
||||||
|
}
|
||||||
|
this.memberNode = DeMemberNode.create(deMembers);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static DeMemberInfo create(DeMember... deMembers) {
|
||||||
|
return new DeMemberInfo(deMembers);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int length() {
|
||||||
|
return members.length;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DeMember[] getMembers() {
|
||||||
|
return members;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DeMemberNode getMemberNode() {
|
||||||
|
return memberNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DeMember getMemberByTag(int tag) {
|
||||||
|
return memberTagMap.get(tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
public DeMember getMemberByField(String field) {
|
||||||
|
return memberFieldMap.get(field);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -32,13 +32,7 @@ public class ObjectDecoder<R extends Reader, T> implements Decodeable<R, T> {
|
|||||||
|
|
||||||
protected DeMember<R, T, ?>[] creatorConstructorMembers = null;
|
protected DeMember<R, T, ?>[] creatorConstructorMembers = null;
|
||||||
|
|
||||||
protected DeMember[] members;
|
protected DeMemberInfo memberInfo;
|
||||||
|
|
||||||
protected DeMemberNode memberNode;
|
|
||||||
|
|
||||||
protected Map<String, DeMember> memberFieldMap;
|
|
||||||
|
|
||||||
protected Map<Integer, DeMember> memberTagMap;
|
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
protected ConvertFactory factory;
|
protected ConvertFactory factory;
|
||||||
@@ -64,14 +58,13 @@ public class ObjectDecoder<R extends Reader, T> implements Decodeable<R, T> {
|
|||||||
} else {
|
} else {
|
||||||
this.typeClass = (Class) type;
|
this.typeClass = (Class) type;
|
||||||
}
|
}
|
||||||
this.members = new DeMember[0];
|
this.memberInfo = DeMemberInfo.create();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void init(final ConvertFactory factory) {
|
public void init(final ConvertFactory factory) {
|
||||||
this.factory = factory;
|
this.factory = factory;
|
||||||
try {
|
try {
|
||||||
if (type == Object.class) {
|
if (type == Object.class) {
|
||||||
this.memberNode = DeMemberNode.create();
|
|
||||||
this.creatorConstructorMembers = null;
|
this.creatorConstructorMembers = null;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -308,14 +301,14 @@ public class ObjectDecoder<R extends Reader, T> implements Decodeable<R, T> {
|
|||||||
initForEachDeMember(factory, member);
|
initForEachDeMember(factory, member);
|
||||||
}
|
}
|
||||||
DeMember[] deMembers = list.toArray(new DeMember[list.size()]);
|
DeMember[] deMembers = list.toArray(new DeMember[list.size()]);
|
||||||
Arrays.sort(this.members, (a, b) -> a.compareTo(factory.isFieldSort(), b));
|
Arrays.sort(deMembers, (a, b) -> a.compareTo(factory.isFieldSort(), b));
|
||||||
this.initFieldMember(deMembers);
|
this.initFieldMember(deMembers);
|
||||||
|
|
||||||
if (cps != null) {
|
if (cps != null) {
|
||||||
final String[] fields = cps;
|
final String[] fields = cps;
|
||||||
final DeMember<R, T, ?>[] ms = new DeMember[fields.length];
|
final DeMember<R, T, ?>[] ms = new DeMember[fields.length];
|
||||||
for (int i = 0; i < fields.length; i++) {
|
for (int i = 0; i < fields.length; i++) {
|
||||||
for (DeMember m : this.members) {
|
for (DeMember m : memberInfo.members) {
|
||||||
if (m.attribute.field().equals(fields[i])) {
|
if (m.attribute.field().equals(fields[i])) {
|
||||||
ms[i] = m;
|
ms[i] = m;
|
||||||
break;
|
break;
|
||||||
@@ -341,14 +334,7 @@ public class ObjectDecoder<R extends Reader, T> implements Decodeable<R, T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected void initFieldMember(DeMember[] deMembers) {
|
protected void initFieldMember(DeMember[] deMembers) {
|
||||||
this.members = deMembers;
|
this.memberInfo = DeMemberInfo.create(deMembers);
|
||||||
this.memberFieldMap = new HashMap<>(this.members.length);
|
|
||||||
this.memberTagMap = new HashMap<>(this.members.length);
|
|
||||||
for (DeMember member : this.members) {
|
|
||||||
this.memberFieldMap.put(member.getAttribute().field(), member);
|
|
||||||
this.memberTagMap.put(member.getTag(), member);
|
|
||||||
}
|
|
||||||
this.memberNode = DeMemberNode.create(this.members);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -384,14 +370,12 @@ public class ObjectDecoder<R extends Reader, T> implements Decodeable<R, T> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DeMemberNode fieldNode = this.memberNode;
|
DeMemberInfo info = this.memberInfo;
|
||||||
Map<String, DeMember> fieldMap = this.memberFieldMap;
|
|
||||||
Map<Integer, DeMember> tagMap = this.memberTagMap;
|
|
||||||
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 (objin.hasNext()) {
|
while (objin.hasNext()) {
|
||||||
DeMember member = objin.readFieldName(fieldNode, fieldMap, tagMap);
|
DeMember member = objin.readFieldName(info);
|
||||||
objin.readBlank();
|
objin.readBlank();
|
||||||
if (member == null) {
|
if (member == null) {
|
||||||
objin.skipValue(); // 跳过不存在的属性的值
|
objin.skipValue(); // 跳过不存在的属性的值
|
||||||
@@ -405,11 +389,11 @@ public class ObjectDecoder<R extends Reader, T> implements Decodeable<R, T> {
|
|||||||
} else { // 带参数的构造函数
|
} else { // 带参数的构造函数
|
||||||
final DeMember<R, T, ?>[] constructorFields = this.creatorConstructorMembers;
|
final DeMember<R, T, ?>[] constructorFields = this.creatorConstructorMembers;
|
||||||
final Object[] constructorParams = new Object[constructorFields.length];
|
final Object[] constructorParams = new Object[constructorFields.length];
|
||||||
final Object[][] otherParams = new Object[this.members.length][2];
|
final Object[][] otherParams = new Object[info.length()][2];
|
||||||
int oc = 0;
|
int oc = 0;
|
||||||
boolean first = true;
|
boolean first = true;
|
||||||
while (objin.hasNext()) {
|
while (objin.hasNext()) {
|
||||||
DeMember member = objin.readFieldName(fieldNode, fieldMap, tagMap);
|
DeMember member = objin.readFieldName(info);
|
||||||
objin.readBlank();
|
objin.readBlank();
|
||||||
if (member == null) {
|
if (member == null) {
|
||||||
objin.skipValue(); // 跳过不存在的属性的值
|
objin.skipValue(); // 跳过不存在的属性的值
|
||||||
@@ -485,19 +469,11 @@ public class ObjectDecoder<R extends Reader, T> implements Decodeable<R, T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public DeMember[] getMembers() {
|
public DeMember[] getMembers() {
|
||||||
return members;
|
return memberInfo.getMembers();
|
||||||
}
|
}
|
||||||
|
|
||||||
public DeMember getMember(String fieldName) {
|
public DeMemberInfo getMemberInfo() {
|
||||||
return memberFieldMap.get(fieldName);
|
return memberInfo;
|
||||||
}
|
|
||||||
|
|
||||||
public Map<String, DeMember> getMemberFieldMap() {
|
|
||||||
return memberFieldMap;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Map<Integer, DeMember> getMemberTagMap() {
|
|
||||||
return memberTagMap;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public DeMember<R, T, ?>[] getConstructorMembers() {
|
public DeMember<R, T, ?>[] getConstructorMembers() {
|
||||||
@@ -510,6 +486,6 @@ public class ObjectDecoder<R extends Reader, T> implements Decodeable<R, T> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "ObjectDecoder{" + "type=" + type + ", members=" + Arrays.toString(members) + '}';
|
return "ObjectDecoder{" + "type=" + type + ", members=" + Arrays.toString(memberInfo.members) + '}';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,8 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package org.redkale.convert;
|
package org.redkale.convert;
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 反序列化的数据读取流
|
* 反序列化的数据读取流
|
||||||
*
|
*
|
||||||
@@ -136,13 +134,11 @@ public abstract class Reader {
|
|||||||
/**
|
/**
|
||||||
* 根据字段读取字段对应的DeMember
|
* 根据字段读取字段对应的DeMember
|
||||||
*
|
*
|
||||||
* @param fieldNode DeMember的全量集合
|
* @param memberInfo DeMember信息
|
||||||
* @param memberFieldMap DeMember的字段名map
|
*
|
||||||
* @param memberTagMap DeMember的tag map
|
|
||||||
* @return 匹配的DeMember
|
* @return 匹配的DeMember
|
||||||
*/
|
*/
|
||||||
public abstract DeMember readFieldName(
|
public abstract DeMember readFieldName(final DeMemberInfo memberInfo);
|
||||||
final DeMemberNode fieldNode, Map<String, DeMember> memberFieldMap, Map<Integer, DeMember> memberTagMap);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 读取一个boolean值
|
* 读取一个boolean值
|
||||||
|
|||||||
@@ -6,7 +6,6 @@
|
|||||||
package org.redkale.convert.bson;
|
package org.redkale.convert.bson;
|
||||||
|
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.Map;
|
|
||||||
import org.redkale.convert.*;
|
import org.redkale.convert.*;
|
||||||
import static org.redkale.convert.Reader.SIGN_NULL;
|
import static org.redkale.convert.Reader.SIGN_NULL;
|
||||||
import org.redkale.convert.ext.ByteSimpledCoder;
|
import org.redkale.convert.ext.ByteSimpledCoder;
|
||||||
@@ -251,11 +250,10 @@ public class BsonReader extends Reader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final DeMember readFieldName(
|
public final DeMember readFieldName(final DeMemberInfo memberInfo) {
|
||||||
final DeMemberNode fieldNode, Map<String, DeMember> memberFieldMap, Map<Integer, DeMember> memberTagMap) {
|
|
||||||
final String exceptedField = readSmallString();
|
final String exceptedField = readSmallString();
|
||||||
this.typeval = readByte();
|
this.typeval = readByte();
|
||||||
return fieldNode.getMember(exceptedField);
|
return memberInfo.getMemberByField(exceptedField);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ public class PatternSimpledCoder<R extends Reader, W extends Writer> extends Sim
|
|||||||
StringSimpledCoder.instance);
|
StringSimpledCoder.instance);
|
||||||
this.creator = args -> Pattern.compile((String) args[1], (Integer) args[0]);
|
this.creator = args -> Pattern.compile((String) args[1], (Integer) args[0]);
|
||||||
this.initFieldMember(new DeMember[] {flagsMember, patternMember});
|
this.initFieldMember(new DeMember[] {flagsMember, patternMember});
|
||||||
this.creatorConstructorMembers = this.members;
|
this.creatorConstructorMembers = this.getMembers();
|
||||||
this.inited = true;
|
this.inited = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ package org.redkale.convert.json;
|
|||||||
|
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.nio.charset.UnmappableCharacterException;
|
import java.nio.charset.UnmappableCharacterException;
|
||||||
import java.util.Map;
|
|
||||||
import org.redkale.convert.*;
|
import org.redkale.convert.*;
|
||||||
import static org.redkale.convert.Reader.*;
|
import static org.redkale.convert.Reader.*;
|
||||||
|
|
||||||
@@ -315,13 +314,12 @@ public class JsonByteBufferReader extends JsonReader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DeMember readFieldName(
|
public DeMember readFieldName(final DeMemberInfo memberInfo) {
|
||||||
final DeMemberNode fieldNode, Map<String, DeMember> memberFieldMap, Map<Integer, DeMember> memberTagMap) {
|
|
||||||
char ch = nextGoodChar(true);
|
char ch = nextGoodChar(true);
|
||||||
if (ch == 0) {
|
if (ch == 0) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
DeMemberNode node = fieldNode;
|
DeMemberNode node = memberInfo.getMemberNode();
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
if (ch == '"' || ch == '\'') {
|
if (ch == '"' || ch == '\'') {
|
||||||
final char quote = ch;
|
final char quote = ch;
|
||||||
|
|||||||
@@ -114,7 +114,7 @@ public class JsonMultiImplDecoder<T> implements Decodeable<JsonReader, T> {
|
|||||||
final Object[][] params = new Object[this.maxMemberCount][2];
|
final Object[][] params = new Object[this.maxMemberCount][2];
|
||||||
while (in.hasNext()) {
|
while (in.hasNext()) {
|
||||||
String fieldName = in.readFieldName();
|
String fieldName = in.readFieldName();
|
||||||
DeMember member = decoder.getMember(fieldName);
|
DeMember member = decoder.getMemberInfo().getMemberByField(fieldName);
|
||||||
// new Set[]{Utility.ofSet("1", "2", "3"), Utility.ofSet("2", "3"), Utility.ofSet("4", "2", "3"),
|
// new Set[]{Utility.ofSet("1", "2", "3"), Utility.ofSet("2", "3"), Utility.ofSet("4", "2", "3"),
|
||||||
// Utility.ofSet("6", "7", "8"), Utility.ofSet("6", "9")};
|
// Utility.ofSet("6", "7", "8"), Utility.ofSet("6", "9")};
|
||||||
if (member == null && !finaled) {
|
if (member == null && !finaled) {
|
||||||
@@ -123,10 +123,10 @@ public class JsonMultiImplDecoder<T> implements Decodeable<JsonReader, T> {
|
|||||||
de = repeats.get(fieldName);
|
de = repeats.get(fieldName);
|
||||||
if (de != null) {
|
if (de != null) {
|
||||||
decoder = de;
|
decoder = de;
|
||||||
member = de.getMember(fieldName);
|
member = de.getMemberInfo().getMemberByField(fieldName);
|
||||||
for (int i = 0; i <= index; i++) { // 迁移params中的DeMember.Attribute
|
for (int i = 0; i <= index; i++) { // 迁移params中的DeMember.Attribute
|
||||||
if (params[i] != null) {
|
if (params[i] != null) {
|
||||||
DeMember dm = de.getMember(((Attribute) params[i][0]).field());
|
DeMember dm = de.getMemberInfo().getMemberByField(((Attribute) params[i][0]).field());
|
||||||
params[i][0] = dm == null ? null : dm.getAttribute();
|
params[i][0] = dm == null ? null : dm.getAttribute();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -134,10 +134,10 @@ public class JsonMultiImplDecoder<T> implements Decodeable<JsonReader, T> {
|
|||||||
} else {
|
} else {
|
||||||
finaled = true;
|
finaled = true;
|
||||||
decoder = de;
|
decoder = de;
|
||||||
member = de.getMember(fieldName);
|
member = de.getMemberInfo().getMemberByField(fieldName);
|
||||||
for (int i = 0; i <= index; i++) { // 迁移params中的DeMember.Attribute
|
for (int i = 0; i <= index; i++) { // 迁移params中的DeMember.Attribute
|
||||||
if (params[i] != null) {
|
if (params[i] != null) {
|
||||||
DeMember dm = de.getMember(((Attribute) params[i][0]).field());
|
DeMember dm = de.getMemberInfo().getMemberByField(((Attribute) params[i][0]).field());
|
||||||
params[i][0] = dm == null ? null : dm.getAttribute();
|
params[i][0] = dm == null ? null : dm.getAttribute();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ package org.redkale.convert.json;
|
|||||||
|
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Map;
|
|
||||||
import org.redkale.convert.*;
|
import org.redkale.convert.*;
|
||||||
import static org.redkale.convert.Reader.*;
|
import static org.redkale.convert.Reader.*;
|
||||||
import org.redkale.convert.Reader.ValueType;
|
import org.redkale.convert.Reader.ValueType;
|
||||||
@@ -659,14 +658,13 @@ public class JsonReader extends Reader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DeMember readFieldName(
|
public DeMember readFieldName(final DeMemberInfo memberInfo) {
|
||||||
final DeMemberNode fieldNode, Map<String, DeMember> memberFieldMap, Map<Integer, DeMember> memberTagMap) {
|
|
||||||
|
|
||||||
final int eof = this.limit;
|
final int eof = this.limit;
|
||||||
if (this.position == eof) {
|
if (this.position == eof) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
DeMemberNode node = fieldNode;
|
DeMemberNode node = memberInfo.getMemberNode();
|
||||||
char ch = nextGoodChar(true); // 需要跳过注释
|
char ch = nextGoodChar(true); // 需要跳过注释
|
||||||
final char[] text0 = this.text;
|
final char[] text0 = this.text;
|
||||||
int currpos = this.position;
|
int currpos = this.position;
|
||||||
@@ -682,6 +680,7 @@ public class JsonReader extends Reader {
|
|||||||
this.position = currpos;
|
this.position = currpos;
|
||||||
return node == null ? null : node.getValue();
|
return node == null ? null : node.getValue();
|
||||||
} else {
|
} else {
|
||||||
|
node = node == null ? null : node.getNode(ch);
|
||||||
int start = currpos;
|
int start = currpos;
|
||||||
for (; ; ) {
|
for (; ; ) {
|
||||||
if (currpos == eof) {
|
if (currpos == eof) {
|
||||||
|
|||||||
@@ -210,10 +210,9 @@ public class ProtobufReader extends Reader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final DeMember readFieldName(
|
public final DeMember readFieldName(final DeMemberInfo memberInfo) {
|
||||||
final DeMemberNode fieldNode, Map<String, DeMember> memberFieldMap, Map<Integer, DeMember> memberTagMap) {
|
|
||||||
int tag = readTag();
|
int tag = readTag();
|
||||||
DeMember member = memberTagMap.get(tag);
|
DeMember member = memberInfo.getMemberByTag(tag);
|
||||||
if (member != null) {
|
if (member != null) {
|
||||||
return member;
|
return member;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package org.redkale.test.convert;
|
package org.redkale.test.convert;
|
||||||
|
|
||||||
import java.util.*;
|
|
||||||
import org.redkale.convert.*;
|
import org.redkale.convert.*;
|
||||||
import org.redkale.convert.bson.*;
|
import org.redkale.convert.bson.*;
|
||||||
import org.redkale.convert.json.*;
|
import org.redkale.convert.json.*;
|
||||||
@@ -41,11 +40,7 @@ public class InnerCoderEntity {
|
|||||||
final org.redkale.convert.ConvertFactory factory) {
|
final org.redkale.convert.ConvertFactory factory) {
|
||||||
return new SimpledCoder<Reader, Writer, InnerCoderEntity>() {
|
return new SimpledCoder<Reader, Writer, InnerCoderEntity>() {
|
||||||
|
|
||||||
private DeMemberNode memberNode;
|
private DeMemberInfo memberInfo;
|
||||||
|
|
||||||
private Map<String, DeMember> deMemberFieldMap;
|
|
||||||
|
|
||||||
private Map<Integer, DeMember> deMemberTagMap;
|
|
||||||
|
|
||||||
// 必须与EnMember[] 顺序一致
|
// 必须与EnMember[] 顺序一致
|
||||||
private final DeMember[] deMembers = new DeMember[] {
|
private final DeMember[] deMembers = new DeMember[] {
|
||||||
@@ -60,13 +55,7 @@ public class InnerCoderEntity {
|
|||||||
};
|
};
|
||||||
|
|
||||||
{
|
{
|
||||||
this.deMemberFieldMap = new HashMap<>(this.deMembers.length);
|
this.memberInfo = DeMemberInfo.create(deMembers);
|
||||||
this.deMemberTagMap = new HashMap<>(this.deMembers.length);
|
|
||||||
for (DeMember member : this.deMembers) {
|
|
||||||
this.deMemberFieldMap.put(member.getAttribute().field(), member);
|
|
||||||
this.deMemberTagMap.put(member.getTag(), member);
|
|
||||||
}
|
|
||||||
this.memberNode = DeMemberNode.create(deMembers);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -88,7 +77,7 @@ public class InnerCoderEntity {
|
|||||||
int index = 0;
|
int index = 0;
|
||||||
final Object[] params = new Object[deMembers.length];
|
final Object[] params = new Object[deMembers.length];
|
||||||
while (in.hasNext()) {
|
while (in.hasNext()) {
|
||||||
DeMember member = in.readFieldName(memberNode, deMemberFieldMap, deMemberTagMap); // 读取字段名
|
DeMember member = in.readFieldName(memberInfo); // 读取字段名
|
||||||
in.readBlank(); // 读取字段名与字段值之间的间隔符,JSON则是跳过冒号:
|
in.readBlank(); // 读取字段名与字段值之间的间隔符,JSON则是跳过冒号:
|
||||||
if (member == null) {
|
if (member == null) {
|
||||||
in.skipValue(); // 跳过不存在的字段的值, 一般不会发生
|
in.skipValue(); // 跳过不存在的字段的值, 一般不会发生
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ public class Json5Test {
|
|||||||
bean.name = "ha\t\"ha";
|
bean.name = "ha\t\"ha";
|
||||||
bean.desc = "normal";
|
bean.desc = "normal";
|
||||||
String json =
|
String json =
|
||||||
"{/*多行\r\n注释**/\"decmails\":3.2,//单行注释\r\n\"id\":0x1F4,\"idx\":600,\"name\":\"ha\\t\\\"ha\",\"desc\":\"normal\",\"value\":44444,}";
|
"{/*多行\r\n注释**/\"decmails\":3.2,//单行注释\r\n\"id\":0x1F4,\"idx\":600,name:\"ha\\t\\\"ha\",\"desc\":\"normal\",\"value\":44444,}";
|
||||||
Json5Bean bean2 = convert.convertFrom(Json5Bean.class, json);
|
Json5Bean bean2 = convert.convertFrom(Json5Bean.class, json);
|
||||||
System.out.println(bean2.name);
|
System.out.println(bean2.name);
|
||||||
Assertions.assertTrue(bean.equals(bean2));
|
Assertions.assertTrue(bean.equals(bean2));
|
||||||
|
|||||||
Reference in New Issue
Block a user