跳至主要內容
扁平化写法示例

提示

  • 在阅读本文之前,建议先阅读 协议格式说明
  • 所谓的 扁平化写法 就是不用单独封装 HeaderBody,而是直接将 HeaderBody 的数据写在同一个实体类中

hylexus大约 1 分钟示例编码解码JT/T 808
嵌套写法示例

提示

  • 在阅读本文之前,建议先阅读 协议格式说明
  • 所谓的 嵌套写法 就是将 HeaderBody 分别封装到单独的实体类中。

解码


hylexus小于 1 分钟示例编码解码JT/T 808
内置注解

请先读我

内置注解都是从 @XtreamField 注解扩展而来的。目前有两种风格的注解:

  • Rust 数据类型命名风格
  • JT/T 808 协议数据类型命名风格

提示

  • 强烈推荐优先使用 Rust 风格内置注解
    • 数据类型比较全面
      • JT/T 808 风格的注解只支持无符号,因为 JT/T 808 官方文档里都是无符号数
    • 支持小端序
  • 不推荐直接使用底层的 @XtreamField 注解
    • 虽然功能最完整,但是使用略显繁琐
    • 但是如果你要自定义注解,那非常推荐使用 @XtreamField 来进行扩展

xtream-codec大约 4 分钟内置注解
自定义注解

自定义注解都是通过元注解 @XtreamField 的来实现的。

本示例将演示通过 @XtreamField 来实现一个自定义的日期注解。

注解定义

注解声明


@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@XtreamField(fieldCodec = MyDateTypeFieldCodec.class, dataType = BeanPropertyMetadata.FiledDataType.basic)
public @interface MyDateType {

    @AliasFor(annotation = XtreamField.class, attribute = "order")
    int order() default -1;

    @AliasFor(annotation = XtreamField.class, attribute = "condition")
    String condition() default "";

}

xtream-codec大约 1 分钟自定义注解
数据类型

1.整数类型

长度 符号位 JavaType Rust风格注解 JT风格注解
1 byte/Byte @Preset.RustStyle.u8 @Preset.JtStyle.Byte
1 short/Short @Preset.RustStyle.i8 --
2 short/Short @Preset.RustStyle.u16 @Preset.JtStyle.WORD
2 int/Integer @Preset.RustStyle.i16 --
4 int/Integer @Preset.RustStyle.u32 @Preset.JtStyle.DWORD
4 long/Long @Preset.RustStyle.i32 --
8 long/Long @Preset.RustStyle.u64 --

xtream-codec小于 1 分钟
@XtreamField

介绍

@XtreamField 是最基础的注解。

内置的 别名(Alias) 注解 @Preset.RustStyle.xxx@Preset.JtStyle.xxx 都是基于 @XtreamField 这个基础注解 衍生 的。

提示

注解别名都是依赖于 Spring@org.springframework.core.annotation.AliasFor 注解实现的。


xtream-codec大约 2 分钟内置注解
扁平化写法示例

提示

  • 在阅读本文之前,建议先阅读 协议格式说明
  • 所谓的 扁平化写法 就是不用单独封装 HeaderBody,而是直接将 HeaderBody 的数据写在同一个实体类中

hylexus大约 1 分钟示例编码解码