public class FastJsonRedisSerializer<T> implements RedisSerializer<T> { public static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8; private final Class<T> clazz; static { ParserConfig.getGlobalInstance().setAutoTypeSupport(true); } public FastJsonRedisSerializer(Class<T> clazz) { super(); this.clazz = clazz; } @Override public byte[] serialize(T t) throws SerializationException { if (t == null) { return new byte[0]; } return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(DEFAULT_CHARSET); } @Override public T deserialize(byte[] bytes) throws SerializationException { if (bytes == null || bytes.length <= 0) { return null; } String str = new String(bytes, DEFAULT_CHARSET); return JSON.parseObject(str, clazz); } protected JavaType getJavaType(Class<?> clazz) { return TypeFactory.defaultInstance().constructType(clazz); } }
时间: 2024-04-15 08:31:30 浏览: 147
这段代码是一个使用 FastJson 序列化和反序列化对象的 Redis 序列化器。下面是对这段代码的注释:
```java
public class FastJsonRedisSerializer<T> implements RedisSerializer<T> {
public static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8; // 默认字符集为 UTF-8
private final Class<T> clazz; // 要序列化和反序列化的对象类型
static {
ParserConfig.getGlobalInstance().setAutoTypeSupport(true); // 设置 FastJson 全局配置,开启自动类型支持
}
public FastJsonRedisSerializer(Class<T> clazz) {
super();
this.clazz = clazz; // 初始化对象类型
}
@Override
public byte[] serialize(T t) throws SerializationException {
if (t == null) {
return new byte[0]; // 如果对象为空,返回空字节数组
}
return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(DEFAULT_CHARSET); // 使用 FastJson 将对象转换为 JSON 字符串,并转换为字节数组
}
@Override
public T deserialize(byte[] bytes) throws SerializationException {
if (bytes == null || bytes.length <= 0) {
return null; // 如果字节数组为空,返回空对象
}
String str = new String(bytes, DEFAULT_CHARSET); // 将字节数组转换为字符串
return JSON.parseObject(str, clazz); // 使用 FastJson 将字符串解析为指定的对象类型
}
protected JavaType getJavaType(Class<?> clazz) {
return TypeFactory.defaultInstance().constructType(clazz); // 获取 JavaType 对象,用于序列化和反序列化
}
}
```
这个类实现了 RedisSerializer 接口,并使用 FastJson 库来进行对象的序列化和反序列化操作。它通过构造方法传入要序列化和反序列化的对象类型,并提供了 `serialize` 和 `deserialize` 方法来实现对象和字节数组之间的转换。在静态代码块中,设置了 FastJson 的全局配置,开启自动类型支持。该类还提供了一个受保护的方法 `getJavaType`,用于获取 JavaType 对象,用于序列化和反序列化操作。
阅读全文