Home - yu000hong/thrift-study GitHub Wiki

Welcome to the thrift-study wiki!

TType

Thrift支持的数据类型:

  public static final byte STOP   = 0;
  public static final byte VOID   = 1;
  public static final byte BOOL   = 2;
  public static final byte BYTE   = 3;
  public static final byte DOUBLE = 4;
  public static final byte I16    = 6;
  public static final byte I32    = 8;
  public static final byte I64    = 10;
  public static final byte STRING = 11;
  public static final byte STRUCT = 12;
  public static final byte MAP    = 13;
  public static final byte SET    = 14;
  public static final byte LIST   = 15;
  public static final byte ENUM   = 16;

TField & TFieldIdEnum & FieldMetaData

TField是一个类,其代表我们定义的数据类型中的一个字段,是由thrift生成的代码,如:

  private static final TField ID_FIELD_DESC = new TField("id", TType.I64, (short)1);
  private static final TField TYPE_FIELD_DESC = new TField("type", TType.I32, (short)2);
  private static final TField XCID_FIELD_DESC = new TField("xcid", TType.I64, (short)3);
  private static final TField STATUS_FIELD_DESC = new TField("status", TType.I32, (short)4);
  private static final TField TITLE_FIELD_DESC = new TField("title", TType.STRING, (short)7);
  private static final TField CARD_FIELD_DESC = new TField("card", TType.STRUCT, (short)11);

TFieldIdEnum是一个接口,也是跟类型字段相关的,由thrift生成,如:

public enum _Fields implements TFieldIdEnum {
    ID((short)1, "id"),
    TYPE((short)2, "type"),
    STATUS((short)4, "status"),
    CREATE_TIME((short)5, "createTime"),
    TITLE((short)7, "title"),
    CONTENT((short)8, "content"),
    CARD((short)11, "card");
    ...
}

FieldMetaData类用于存放字段的元数据,包括:字段名、是否必须、值类型元数据。

meta_data package

meta_data包里有7个类,它们分别是:

  • FieldMetaData
  • FieldValueMetaData
  • EnumMetaData
  • ListMetaData
  • MapMetaData
  • SetMetaData
  • StructMetaData

其中,FieldMetaData表示字段的元数据,而FieldValueMetaData及其子类表示字段值类型的元数据。FieldValueMetaData能表示一些基础类型的元数据信息,复杂类型(list、map、set、enum、struct)的元数据则由其子类负责。

继承关系:

FieldValueMetaData
      |------ListMetaData
      |------MapMetaData
      |------SetMetaData
      |------StructMetaData
      |------EnumMetaData

Scheme

org.apache.thrift.scheme包里面有两个接口两个类,分别是:

  • IScheme
  • SchemeFactory
  • StandardScheme
  • TupleScheme

类继承关系如下:

IScheme
   |----StandardScheme
   |----TupleScheme

scheme在thrift里面有什么用途目前还没研究清楚,但是目前thrift里面大部分protocol都是支持StandardScheme,TupleScheme支持较少。不同Scheme在写入数据到通信信道时候的格式不一样。