-
Notifications
You must be signed in to change notification settings - Fork 12
Data Type Annotations zh
English | 中文
FastProto支持Java基本数据类型、Timestamp、String和字节数组,以上类型均可由@AutoType
代替。
考虑到跨语言跨平台的数据交换,FastProto还引入了无符号类型。
注解 | Java | C/C++ | 大小 | AutoType |
---|---|---|---|---|
@BooleanType |
Boolean / boolean | bool | 1 位 | √ |
@CharacterType |
Character / char | -- | 2 字节 | √ |
@ByteType |
Byte / byte | char | 1 字节 | √ |
@ShortType |
Short / short | short | 2 字节 | √ |
@IntegerType |
Integer / int | int | 4 字节 | √ |
@LongType |
Long / long | long long | 8 字节 | √ |
@FloatType |
Float / float | float | 4 字节 | √ |
@DoubleType |
Double / double | double | 8 字节 | √ |
@Integer8Type |
Integer / int | char | 1 字节 | × |
@Integer16Type |
Integer / int | short | 2 字节 | × |
@UInteger8Type |
Integer / int | unsigned char | 1 字节 | × |
@UInteger16Type |
Integer / int | unsigned short | 2 字节 | × |
@UInteger32Type |
Long / long | unsigned long | 4 字节 | × |
@UInteger64Type |
BigInteger | unsigned long long | 8 字节 | √ |
@BinaryType |
byte[] | char[] | 不定长度 | √ |
@StringType |
java.lang.String | -- | 不定长度 | √ |
@TimestampType |
java.sql.Timestamp | -- | 4 / 8 字节 | √ |
@ArrayType |
基本数据类型数组 | 基本数据类型数组 | 不定长度 | √ |
@ListType |
基本数据类型列表 | -- | 不定长度 | √ |
@EnumType |
枚举 | 枚举 | 1 / 2 字节 | √ |
布尔类型注解,可直接修饰Boolean和boolean类型字段,或者通过指定编码公式和解码公式,修饰任意类型字段。
字段 | 类型 | 说明 |
---|---|---|
value | int | 字节偏移量 |
bitOffset | int | 位偏移量 |
afterDecode | Class<? extend Function>[] | 解码公式 |
beforeEncode | Class<? extend Function>[] | 编码公式 |
字符类型注解,可直接修饰Character和char类型字段,或者通过指定编码公式和解码公式后,修饰任意类型字段。
字段 | 类型 | 说明 |
---|---|---|
value | int | 字节偏移量 |
afterDecode | Class<? extend Function> | 解码公式 |
beforeEncode | Class<? extend Function> | 编码公式 |
字节类型注解,可直接修饰Byte和byte类型字段,或者通过指定编码公式和解码公式后,修饰任意类型字段。
字段 | 类型 | 说明 |
---|---|---|
value | int | 字节偏移量 |
afterDecode | Class<? extend Function> | 解码公式 |
beforeEncode | Class<? extend Function> | 编码公式 |
短整型注解,可直接修饰Short和short类型字段,或者通过指定编码公式和解码公式后,修饰任意类型字段。
字段 | 类型 | 说明 |
---|---|---|
value | int | 字节偏移量 |
afterDecode | Class<? extend Function> | 解码公式 |
beforeEncode | Class<? extend Function> | 编码公式 |
整型注解,可直接修饰Integer和int类型字段,或者通过指定编码公式和解码公式后,修饰任意类型字段。
字段 | 类型 | 说明 |
---|---|---|
value | int | 字节偏移量 |
afterDecode | Class<? extend Function> | 解码公式 |
beforeEncode | Class<? extend Function> | 编码公式 |
长整型注解,可直接修饰Long和long类型字段,或者通过指定编码公式和解码公式后,修饰任意类型字段。
字段 | 类型 | 说明 |
---|---|---|
value | int | 字节偏移量 |
afterDecode | Class<? extend Function> | 解码公式 |
beforeEncode | Class<? extend Function> | 编码公式 |
单精度浮点类型注解,可直接修饰Float和float类型字段,或者通过指定编码公式和解码公式后,修饰任意类型字段。
字段 | 类型 | 说明 |
---|---|---|
value | int | 字节偏移量 |
afterDecode | Class<? extend Function> | 解码公式 |
beforeEncode | Class<? extend Function> | 编码公式 |
双精度浮点类型注解,可直接修饰Double和double类型字段,或者通过指定编码公式和解码公式后,修饰任意类型字段。
字段 | 类型 | 说明 |
---|---|---|
value | int | 字节偏移量 |
afterDecode | Class<? extend Function> | 解码公式 |
beforeEncode | Class<? extend Function> | 编码公式 |
有符号八位整型注解,可直接修饰Integer和int类型字段,或者通过指定编码公式和解码公式后,修饰任意类型字段。
字段 | 类型 | 说明 |
---|---|---|
value | int | 字节偏移量 |
afterDecode | Class<? extend Function> | 解码公式 |
beforeEncode | Class<? extend Function> | 编码公式 |
有符号16位整型注解,可直接修饰Integer和int类型字段,或者通过指定编码公式和解码公式后,修饰任意类型字段。
字段 | 类型 | 说明 |
---|---|---|
value | int | 字节偏移量 |
afterDecode | Class<? extend Function> | 解码公式 |
beforeEncode | Class<? extend Function> | 编码公式 |
无符号八位整型注解,可直接修饰Integer和int类型字段,或者通过指定编码公式和解码公式后,修饰任意类型字段。
字段 | 类型 | 说明 |
---|---|---|
value | int | 字节偏移量 |
afterDecode | Class<? extend Function> | 解码公式 |
beforeEncode | Class<? extend Function> | 编码公式 |
无符号16位整型注解,可直接修饰Integer和int类型字段,或者通过指定编码公式和解码公式后,修饰任意类型字段。
字段 | 类型 | 说明 |
---|---|---|
value | int | 字节偏移量 |
afterDecode | Class<? extend Function> | 解码公式 |
beforeEncode | Class<? extend Function> | 编码公式 |
无符号32位整型注解,可直接修饰Long和long类型字段,或者通过指定编码公式和解码公式后,修饰任意类型字段。
字段 | 类型 | 说明 |
---|---|---|
value | int | 字节偏移量 |
afterDecode | Class<? extend Function> | 解码公式 |
beforeEncode | Class<? extend Function> | 编码公式 |
无符号64位整型注解,可直接修饰BigInteger类型字段,或者通过指定编码公式和解码公式后,修饰任意类型字段。
字段 | 类型 | 说明 |
---|---|---|
value | int | 字节偏移量 |
afterDecode | Class<? extend Function> | 解码公式 |
beforeEncode | Class<? extend Function> | 编码公式 |
二进制类型注解,可直接修饰byte[]类型字段,或者通过指定编码公式和解码公式后,修饰任意类型字段。
字段 | 类型 | 说明 |
---|---|---|
value | int | 字节偏移量 |
length | int | 长度 |
afterDecode | Class<? extend Function> | 解码公式 |
beforeEncode | Class<? extend Function> | 编码公式 |
字符串类型注解,可直接修饰String类型字段,或者通过指定编码公式和解码公式后,修饰任意类型字段。
字段 | 类型 | 说明 |
---|---|---|
value | int | 字节偏移量 |
length | int | 长度 |
charsetName | String | 字符集,默认UTF-8 |
afterDecode | Class<? extend Function> | 解码公式 |
beforeEncode | Class<? extend Function> | 编码公式 |
时间戳类型注解,可直接修饰java.sql.Timestamp类型字段,或者通过指定编码公式和解码公式后,修饰任意类型字段。
字段 | 类型 | 说明 |
---|---|---|
value | int | 字节偏移量 |
protocolType | ProtocolType | 协议数据类型 |
unit | TimeUnit | 单位 |
afterDecode | Class<? extend Function> | 解码公式 |
beforeEncode | Class<? extend Function> | 编码公式 |
日期类型注解,可直接修饰java.util.Date类型字段,或者通过指定编码公式和解码公式后,修饰任意类型字段。
字段 | 类型 | 说明 |
---|---|---|
value | int | 字节偏移量 |
protocolType | ProtocolType | 协议数据类型 |
unit | TimeUnit | 单位 |
afterDecode | Class<? extend Function> | 解码公式 |
beforeEncode | Class<? extend Function> | 编码公式 |
数组类型注解,可直接修饰Java任意基本数据类型数组字段,或者通过指定编码公式和解码公式后,修饰任意类型字段。
字段 | 类型 | 说明 |
---|---|---|
value | int | 字节偏移量 |
protocolType | ProtocolType | 协议数据类型 |
unit | TimeUnit | 单位 |
afterDecode | Class<? extend Function> | 解码公式 |
beforeEncode | Class<? extend Function> | 编码公式 |
列表类型注解,可直接修饰java.util.List类型字段,或者通过指定编码公式和解码公式后,修饰任意类型字段。
字段 | 类型 | 说明 |
---|---|---|
value | int | 字节偏移量 |
protocolType | ProtocolType | 协议数据类型 |
length | int | 长度 |
afterDecode | Class<? extend Function> | 解码公式 |
beforeEncode | Class<? extend Function> | 编码公式 |
枚举类型注解,可直接修饰Java枚举类型字段,或者通过指定编码公式和解码公式后,修饰任意类型字段。
字段 | 类型 | 说明 |
---|---|---|
value | int | 字节偏移量 |
protocolType | ProtocolType | 协议数据类型 |
afterDecode | Class<? extend Function> | 解码公式 |
beforeEncode | Class<? extend Function> | 编码公式 |
当被修饰的字段是Java原生数据类型时,开发者可以直接使用AutoType注解替代其实际注解,FastProto会根据字段类型推断协议类型。
为了解码不定长数据,FastProto支持反向寻址:
- 如果字节偏移量等于-1,则寻址到数据的末尾;同样,如果字节偏移量等于-2,则寻址数据的倒数第二个字节
- StringType和BianryType的length也支持反向寻址。如果长度等于-1,则地址是到数据的末尾。类似地,如果长度等于-2,那么寻址倒数第二个字节