docs: @Override
      public T convertFrom(final R in) {
          final String clazz = in.readObjectB(typeClass);
          if (clazz == null) return null;
          if (!clazz.isEmpty()) return (T) factory.loadDecoder(factory.getEntityAlias(clazz)).convertFrom(in);
          if (!this.inited) {
              synchronized (lock) {
                  try {
                      lock.wait();
                  } catch (Exception e) {
                      e.printStackTrace();
                  }
              }
          }
          if (this.creator == null) {
              if (typeClass.isInterface() || Modifier.isAbstract(typeClass.getModifiers())) {
                  throw new ConvertException("[" + typeClass + "] is a interface or abstract class, cannot create it's Creator.");
              }
          }
          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();
                  if (member == null) {
                      in.skipValue(); //跳过不存在的属性的值
                  } else {
                      readMemberValue(in, member, result, first);
                  }
                  first = false;
              }
              in.readObjectE(typeClass);
              return result;
          } else {  //带参数的构造函数
              final DeMember<R, T, ?>[] fields = this.creatorConstructorMembers;
              final Object[] constructorParams = new Object[fields.length];
              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();
                  if (member == null) {
                      in.skipValue(); //跳过不存在的属性的值
                  } else {
                      Object val = readMemberValue(in, member, first);
                      boolean flag = true;
                      for (int i = 0; i < fields.length; i++) {
                          if (member == fields[i]) {
                              constructorParams[i] = val;
                              flag = false;
                              break;
                          }
                      }
                      if (flag) otherParams[oc++] = new Object[]{member.attribute, val};
  
                  }
                  first = false;
              }
              in.readObjectE(typeClass);
              if (this.creator == null) return null;
              final T result = this.creator.create(constructorParams);
              for (int i = 0; i < oc; i++) {
                  ((Attribute) otherParams[i][0]).set(result, otherParams[i][1]);
              }
              return result;
          }
      }