Skip to content

Data Type Annotations zh

deng_ran edited this page Aug 12, 2021 · 2 revisions

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 字节

@BooleanType

布尔类型注解,可直接修饰Boolean和boolean类型字段,或者通过指定编码公式和解码公式,修饰任意类型字段。

字段 类型 说明
value int 字节偏移量
bitOffset int 位偏移量
afterDecode Class<? extend Function>[] 解码公式
beforeEncode Class<? extend Function>[] 编码公式

@CharacterType

字符类型注解,可直接修饰Character和char类型字段,或者通过指定编码公式和解码公式后,修饰任意类型字段。

字段 类型 说明
value int 字节偏移量
afterDecode Class<? extend Function> 解码公式
beforeEncode Class<? extend Function> 编码公式

@ByteType

字节类型注解,可直接修饰Byte和byte类型字段,或者通过指定编码公式和解码公式后,修饰任意类型字段。

字段 类型 说明
value int 字节偏移量
afterDecode Class<? extend Function> 解码公式
beforeEncode Class<? extend Function> 编码公式

@ShortType

短整型注解,可直接修饰Short和short类型字段,或者通过指定编码公式和解码公式后,修饰任意类型字段。

字段 类型 说明
value int 字节偏移量
afterDecode Class<? extend Function> 解码公式
beforeEncode Class<? extend Function> 编码公式

@IntegerType

整型注解,可直接修饰Integer和int类型字段,或者通过指定编码公式和解码公式后,修饰任意类型字段。

字段 类型 说明
value int 字节偏移量
afterDecode Class<? extend Function> 解码公式
beforeEncode Class<? extend Function> 编码公式

@LongType

长整型注解,可直接修饰Long和long类型字段,或者通过指定编码公式和解码公式后,修饰任意类型字段。

字段 类型 说明
value int 字节偏移量
afterDecode Class<? extend Function> 解码公式
beforeEncode Class<? extend Function> 编码公式

@FloatType

单精度浮点类型注解,可直接修饰Float和float类型字段,或者通过指定编码公式和解码公式后,修饰任意类型字段。

字段 类型 说明
value int 字节偏移量
afterDecode Class<? extend Function> 解码公式
beforeEncode Class<? extend Function> 编码公式

@DoubleType

双精度浮点类型注解,可直接修饰Double和double类型字段,或者通过指定编码公式和解码公式后,修饰任意类型字段。

字段 类型 说明
value int 字节偏移量
afterDecode Class<? extend Function> 解码公式
beforeEncode Class<? extend Function> 编码公式

@Integer8Type

有符号八位整型注解,可直接修饰Integer和int类型字段,或者通过指定编码公式和解码公式后,修饰任意类型字段。

字段 类型 说明
value int 字节偏移量
afterDecode Class<? extend Function> 解码公式
beforeEncode Class<? extend Function> 编码公式

@Integer16Type

有符号16位整型注解,可直接修饰Integer和int类型字段,或者通过指定编码公式和解码公式后,修饰任意类型字段。

字段 类型 说明
value int 字节偏移量
afterDecode Class<? extend Function> 解码公式
beforeEncode Class<? extend Function> 编码公式

@UInteger8Type

无符号八位整型注解,可直接修饰Integer和int类型字段,或者通过指定编码公式和解码公式后,修饰任意类型字段。

字段 类型 说明
value int 字节偏移量
afterDecode Class<? extend Function> 解码公式
beforeEncode Class<? extend Function> 编码公式

@UInteger16Type

无符号16位整型注解,可直接修饰Integer和int类型字段,或者通过指定编码公式和解码公式后,修饰任意类型字段。

字段 类型 说明
value int 字节偏移量
afterDecode Class<? extend Function> 解码公式
beforeEncode Class<? extend Function> 编码公式

@UInteger32Type

无符号32位整型注解,可直接修饰Long和long类型字段,或者通过指定编码公式和解码公式后,修饰任意类型字段。

字段 类型 说明
value int 字节偏移量
afterDecode Class<? extend Function> 解码公式
beforeEncode Class<? extend Function> 编码公式

@UInteger64Type

无符号64位整型注解,可直接修饰BigInteger类型字段,或者通过指定编码公式和解码公式后,修饰任意类型字段。

字段 类型 说明
value int 字节偏移量
afterDecode Class<? extend Function> 解码公式
beforeEncode Class<? extend Function> 编码公式

@BinaryType

二进制类型注解,可直接修饰byte[]类型字段,或者通过指定编码公式和解码公式后,修饰任意类型字段。

字段 类型 说明
value int 字节偏移量
length int 长度
afterDecode Class<? extend Function> 解码公式
beforeEncode Class<? extend Function> 编码公式

@StringType

字符串类型注解,可直接修饰String类型字段,或者通过指定编码公式和解码公式后,修饰任意类型字段。

字段 类型 说明
value int 字节偏移量
length int 长度
charsetName String 字符集,默认UTF-8
afterDecode Class<? extend Function> 解码公式
beforeEncode Class<? extend Function> 编码公式

@TimestampType

时间戳类型注解,可直接修饰java.sql.Timestamp类型字段,或者通过指定编码公式和解码公式后,修饰任意类型字段。

字段 类型 说明
value int 字节偏移量
protocolType ProtocolType 协议数据类型
unit TimeUnit 单位
afterDecode Class<? extend Function> 解码公式
beforeEncode Class<? extend Function> 编码公式

@Date

日期类型注解,可直接修饰java.util.Date类型字段,或者通过指定编码公式和解码公式后,修饰任意类型字段。

字段 类型 说明
value int 字节偏移量
protocolType ProtocolType 协议数据类型
unit TimeUnit 单位
afterDecode Class<? extend Function> 解码公式
beforeEncode Class<? extend Function> 编码公式

@ArrayType

数组类型注解,可直接修饰Java任意基本数据类型数组字段,或者通过指定编码公式和解码公式后,修饰任意类型字段。

字段 类型 说明
value int 字节偏移量
protocolType ProtocolType 协议数据类型
unit TimeUnit 单位
afterDecode Class<? extend Function> 解码公式
beforeEncode Class<? extend Function> 编码公式

@ListType

列表类型注解,可直接修饰java.util.List类型字段,或者通过指定编码公式和解码公式后,修饰任意类型字段。

字段 类型 说明
value int 字节偏移量
protocolType ProtocolType 协议数据类型
length int 长度
afterDecode Class<? extend Function> 解码公式
beforeEncode Class<? extend Function> 编码公式

@EnumType

枚举类型注解,可直接修饰Java枚举类型字段,或者通过指定编码公式和解码公式后,修饰任意类型字段。

字段 类型 说明
value int 字节偏移量
protocolType ProtocolType 协议数据类型
afterDecode Class<? extend Function> 解码公式
beforeEncode Class<? extend Function> 编码公式

自动类型

当被修饰的字段是Java原生数据类型时,开发者可以直接使用AutoType注解替代其实际注解,FastProto会根据字段类型推断协议类型。

反向寻址

为了解码不定长数据,FastProto支持反向寻址:

  • 如果字节偏移量等于-1,则寻址到数据的末尾;同样,如果字节偏移量等于-2,则寻址数据的倒数第二个字节
  • StringType和BianryType的length也支持反向寻址。如果长度等于-1,则地址是到数据的末尾。类似地,如果长度等于-2,那么寻址倒数第二个字节