fastjson可以实现java的序列化和反序列化操作,这里使用serialize的方法重新写序列化方法改写成JSON格式,方便通信与读写。
首先定义FastJsonRedisSerializer.java内容
java
public class FastJsonRedisSerializer<T> implements RedisSerializer<T>
{
public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");
private Class<T> clazz;
static
{
//静态变量、静态方法、静态常量统称为类的静态成员,归整个类所有
//不属于某个单一的对象
//ParserConfig.getGlobalInstance().setAutoTypeSupport(true);
//全局变量设置为这个
}
public FastJsonRedisSerializer(Class<T> clazz)
{
super();
this.clazz = clazz;
}
//重新写序列化方法,改写成JSON格式,方便通信与读写
@Override
public byte[] serialize(T t) throws SerializationException
{
if (t == null)
{
return new byte[0];
}
return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(DEFAULT_CHARSET);
/***
toJSONString(t,SerializerFeature.WriteClassName)中
WriteClassName:序列化写入类型信息,默认为false
普通的JSON文本不知道它是什么类型,比如{"id":12,"name":魏嘉留}
传入的JSON文本{"@type":"com.alibaba.demo.Employee","id":12,"name":魏嘉留}
***/
}
@Override
public T deserialize(byte[] bytes) throws SerializationException
{
if (bytes == null || bytes.length <= 0)
{
return null;
}
String str = new String(bytes, DEFAULT_CHARSET);
//DEFAULT_CHARSET为上面定义的UTF-8
//System.out.println("clazz = "+clazz);
return JSON.parseObject(str, clazz);
}
然后调用Json开始进行序列化以及反序列化操作:
java
public class Helloworld {
public static void main(String[] args) {
FastJsonRedisSerializer a = new FastJsonRedisSerializer(Integer.class);
System.out.println(a.serialize(new Integer(5)));
System.out.println(a.deserialize(a.serialize(new Integer(5))));
}
}
输出的结果为
[B@5e8c92f4
5
这里java序列化的过程将类转为byte类型的数组,而反序列化的过程又将byte类型的数组转为Integer类型的数据