0
点赞
收藏
分享

微信扫一扫

java反序列化serialVersionUID不一致问题

曾宝月 2022-04-14 阅读 139
java

文章目录


前言

serialVersionUID变化后,反序列化失败(实体类的serialVersionUID被修改或没有设置serialVersionUID,实体类属性有变更)


记录遇到的问题,不保证正确。

一、序列化、反序列化

在这里插入图片描述

二、解决方法

实现ObjectInputStream类,重写readClassDescriptor方法

class DecompressibleInputStream extends ObjectInputStream {

public DecompressibleInputStream(InputStream in) throws IOException {
    super(in);
}
@Override
protected ObjectStreamClass readClassDescriptor() throws IOException, ClassNotFoundException {
    ObjectStreamClass resultClassDescriptor = super.readClassDescriptor();
    Class localClass;
    try {
        localClass = Class.forName(resultClassDescriptor.getName());
    } catch (ClassNotFoundException e) {
        return resultClassDescriptor;
    }
    ObjectStreamClass localClassDescriptor = ObjectStreamClass.lookup(localClass);
    if (localClassDescriptor != null) {
        final long localSUID = localClassDescriptor.getSerialVersionUID();
        final long streamSUID = resultClassDescriptor.getSerialVersionUID();
        if (streamSUID != localSUID) {
            try {
                Field suid = resultClassDescriptor.getClass().getDeclaredField("suid");
                suid.setAccessible(true);
                suid.set(resultClassDescriptor, localSUID);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    return resultClassDescriptor;
}

}

使用
在这里插入图片描述

举报

相关推荐

0 条评论