# codec **Repository Path**: gzcltech/codec ## Basic Information - **Project Name**: codec - **Description**: No description available - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-15 - **Last Updated**: 2026-07-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # codec 从 [Redisson](https://github.com/redisson/redisson) 抽取出的通用编解码库。缓冲类型使用 `byte[]` / `java.nio.ByteBuffer`,**不依赖 Netty**,也不绑定 Redis 协议语义。 > 与 Redisson 写入 Redis 的存量数据 **不保证字节互通**;本库是独立通用序列化 API。 ## 模块 | 模块 | 说明 | |------|------| | `codec-bom` | BOM:统一管理本库各模块版本(供下游 `import`) | | `codec-core` | `Encoder` / `Decoder` / `ObjectCodec` / `JsonCodec` / `Codec`(`Codec` 与 `ObjectCodec` 互不继承,同 Redisson)、基础类型、`SerializationCodec`、Wrapper | | `codec-jackson` | Jackson 2:`JsonJacksonCodec`、`JacksonCodec`(`JsonCodec`) | | `codec-jackson3` | Jackson 3:`Jackson3Codec`(`JsonCodec`) | | `codec-gson` | Gson:`GsonCodec`(`JsonCodec`) | | `codec-fastjson` | Fastjson2:`FastjsonCodec`(`JsonCodec`) | | `codec-cyber-json` | cyber-json-core:`CyberJsonCodec`(`JsonCodec`) | | `codec-kryo5` | Kryo 5 实现 `Kryo5Codec` | | `codec-fory` | Apache Fory 实现 `ForyCodec` | | `codec-lz4` | LZ4 压缩 Wrapper:`LZ4Codec`(lz4-java),默认 inner=`Kryo5Codec` | | `codec-lz4-commons` | LZ4 压缩 Wrapper:`LZ4CodecV2`(Commons Compress BlockLZ4),默认 inner=`Kryo5Codec` | | `codec-snappy` | Snappy 压缩 Wrapper:`SnappyCodec`(snappy-java),默认 inner=`Kryo5Codec` | | `codec-protobuf` | 原生 Protobuf:`ProtobufCodec`(`BaseCodec`) | ## 依赖示例 推荐先引入 BOM,再按需声明模块(可省略 ``): ```xml io.gitee.gzcltech.codec codec-bom ${revision} pom import io.gitee.gzcltech.codec codec-core io.gitee.gzcltech.codec codec-jackson ``` 也可直接写版本(不使用 BOM): ```xml io.gitee.gzcltech.codec codec-core ${revision} io.gitee.gzcltech.codec codec-jackson ${revision} io.gitee.gzcltech.codec codec-jackson3 ${revision} io.gitee.gzcltech.codec codec-gson ${revision} io.gitee.gzcltech.codec codec-fastjson ${revision} io.gitee.gzcltech.codec codec-cyber-json ${revision} io.gitee.gzcltech.codec codec-kryo5 ${revision} io.gitee.gzcltech.codec codec-fory ${revision} io.gitee.gzcltech.codec codec-lz4 ${revision} io.gitee.gzcltech.codec codec-lz4-commons ${revision} io.gitee.gzcltech.codec codec-snappy ${revision} io.gitee.gzcltech.codec codec-protobuf ${revision} ``` ## 快速使用 ```java Codec codec = JsonJacksonCodec.INSTANCE; byte[] bytes = codec.encode(obj); MyType decoded = codec.decode(bytes, MyType.class); // ByteBuffer 重载(写入当前 position,解码消费 remaining) ByteBuffer buffer = ByteBuffer.allocate(1024); codec.encode(obj, buffer); buffer.flip(); MyType fromBuffer = codec.decode(buffer, MyType.class); // 直接使用 Encoder / Decoder Encoder encoder = codec.getEncoder(); Decoder decoder = codec.getDecoder(); ``` 基础类型: ```java StringCodec.INSTANCE.encode("hello"); IntegerCodec.INSTANCE.decode(IntegerCodec.INSTANCE.encode(42), Integer.class); ``` `ObjectCodec` / `JsonCodec`仅提供 `getEncoder()` / `getDecoder()`(与 Redisson 一致;需要 `encode`/`decode` 或 `ClassLoader` 时经 Wrapper 转为完整 `Codec`): ```java JsonCodec json = new JacksonCodec<>(MyType.class); // Jackson 2 JsonCodec json3 = new Jackson3Codec<>(MyType.class); // Jackson 3 JsonCodec gson = new GsonCodec(MyType.class); // Gson JsonCodec fastjson = new FastjsonCodec(MyType.class); // Fastjson2 JsonCodec cyber = new CyberJsonCodec(MyType.class); // cyber-json-core byte[] bytes = json.getEncoder().encode(obj); MyType decoded = json.getDecoder().decode(bytes, MyType.class); Codec codec = new JsonCodecWrapper(json); ObjectCodec objects = IntegerCodec.INSTANCE; Codec wrapped = new ObjectCodecWrapper(objects); Codec protobuf = new ProtobufCodec<>(StringValue.class); // com.google.protobuf.StringValue ``` LZ4 压缩 Wrapper(`codec-lz4` 使用 lz4-java,`codec-lz4-commons` 使用 Commons Compress BlockLZ4;**两种帧格式互不兼容**,与 Redisson 线格式也**不保证互通**): ```java Codec compressed = new LZ4Codec(); // default Kryo5 Codec custom = new LZ4Codec(JsonJacksonCodec.INSTANCE); Codec v2 = new LZ4CodecV2(StringCodec.INSTANCE); ``` Snappy 压缩 Wrapper(`codec-snappy` / snappy-java;**无**长度头,与 LZ4 Wrapper 帧格式不同;与 Redisson **不保证互通**): ```java Codec snappy = new SnappyCodec(); // default Kryo5 Codec snappyCustom = new SnappyCodec(JsonJacksonCodec.INSTANCE); ``` 未压缩 payload 建议不超过约 64 MiB(软限制,超限将抛出 IOException)。 ## 构建 ```bash mvn -DskipTests=false test ``` ## License Apache License 2.0。思路借鉴 Redisson,详见 [NOTICE](NOTICE)。