Java序列化和反序列化操作

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类型的数据

相关推荐
Moshow郑锴13 小时前
sql-pipeline - 基于PostgreSQL的SQL健康检查与发布编排平台
java·sql
weixin_3077791316 小时前
C++代码实现MATLAB中的dlarray函数功能
开发语言·c++·算法·matlab
一水鉴天19 小时前
映射、哈希表与哈斯图:计算机科学的三种基线 20261003(元宝)
开发语言·人工智能
Frank_refuel20 小时前
C++11之一场名为“搬家”的 C++ 之旅
开发语言·c++
海绵宝宝转agent20 小时前
learn-claude-code第1-5章开源学习笔记分享
人工智能·笔记·python·学习
小奇不哭20 小时前
ROS2 单节点,RGB-D 深度相机局部路径提取 + B 样条平滑路径 + YOLOv8 障碍物检测 + 深度测距,用于移动机器人视觉局部循迹。
python·yolov8·ros2·cv2·路径探索循迹
小小龙学IT20 小时前
Python scikit-learn 机器学习库深度解析
python·机器学习·scikit-learn
Wang's Blog21 小时前
Java 项目实战: 外卖平台优化-Nginx配置文件结构与块层级
java·开发语言·nginx
2601_9620715721 小时前
类变量和全局变量的查找路径有什么区别?
开发语言·python
卷无止境1 天前
独立开发者的"富矿地带":哪些垂直领域值得你押注一辈子?
后端·python