Java序列化_unknown object tag -126

news2024/11/26 18:45:27

项目场景:

第一次进入获取员工信息的方法时,会先通过序列化数据库的对应员工信息并保存到 Redis 中。
第二次进入获取员工信息的方法时,直接取出 Redis 里序列化后员工信息,进行反序列化后返回。


问题描述

这里是第一次保存成功后,第二次反序列化的时候,一直提示反序列化某个字符异常。

这里我写了一个对应的简单测试

功能:

  1. 获取对应的序列化工具包
  2. 通过工具包序列化 User 对象为字节
  3. 通过工具包把字节转换成 User 对象

其中 FstSerializer 是一个对应的序列化类

public static void main(String[] args) throws Exception {
		FstSerializer instance = FstSerializer.getInstance();
		// 由于业务数据需要保密,这里可以理解为一个user对象的Json串
		String jsonS = "{\"userId\":1,\"userNamel\":zs\",\"amount\":2.00......\"\"}";
        User user= JsonUtil.str2Object(jsonS, User.class);
		byte[] serialize = instance.serialize(user);
		User deserialize = instance.deserialize(serialize, User.class);
		System.out.println(deserialize.getUserId());
}		

运行时候会抛出解析某个字节异常 (细心的话可以发现有一个BigDecimal 的报错)

在这里插入图片描述

原因分析:

  1. 一开始的第一想法是从 unknown object tag -126 入手,但是在网上找了好久没有对应的解决方案。
  2. 接着考虑到序列化的工具包是我们公司自己封装的,会不会是工具包解析有异常呢。
    (自己在那 debug 了半天,没发现什么问题)
  3. 接着又想到让同事跑一下相同的代码,看一下有什么问题吗。
    (诡异的事情发生了,他的电脑是可以正常反序列出来的)
  4. 这时候,我已经有点郁闷了。别人不出问题,就我有问题。
    (那环境或者对应的版本号有问题吗)

看了许久,对了项目仓库版本号啥的,一切都是一致的。
最后又反回去看了一下报错(重要的遗漏点 ===> 一开始以为Jdk 的类能有什么好看的呢): at java.math.BigDecimal.readObject(BigDecimal.java:3798)
在这里插入图片描述
最后,大哥给了我一个大胆的猜想:会不会是 JDK 版本有 bug 呢
我对了一下我们两个机器的 jdk 版本号。
我的机器: 1.8.0_351
同事的机器: 1.8.0_301

然后我们对比了两个人 BigDecimal 类中的 readObject 方法
1.8.0_351 (报错的那一行)

在这里插入图片描述
1.8.0_301 (正常运行版本中的方法)

在这里插入图片描述

解决方案:

底层代码我也没有去深究了,我把 jdk 的版本降为 1.8.0_301。重新运行后,它可以正常反序列化,并拿到对应的 userId。
在这里插入图片描述
升级后,可能是对 BigDecimal 读取属性值没有做兼容。导致反序列化的时候,出了异常;只能说这种情况还是十分低的。如果遇到同样的问题,希望对你有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/90150.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

重温经典,推箱子游戏,你能闯到第几关?可自行添加关卡

🎈 作者:Linux猿 🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊! &…

WebDAV之葫芦儿·派盘+厚墨

厚墨 支持WebDAV方式连接葫芦儿派盘。 如果你喜欢看电子书又时常书荒,搜索不到想要的电子书,那就快来试试厚墨阅读APP吧。与你一同搜索极简阅读中的最佳体验。 厚墨是目前网络上非常方便的一款电子阅读软件,采用独家数据采集分析技术,汇合了移动互联网各种资源网站大数据…

【JavaSE成神之路】可变参数

哈喽,我是兔哥呀,今天就让我们继续这个JavaSE成神之路! 这一节啊,咱们要学习的内容是Java的可变参数。 1.什么是可变参数 首先来看下概念。 Java的可变参数指的是在方法中设置不定数量的参数。可变参数使得代码更加简洁&#x…

用cocos creator实现《我的世界》

摘要 《我的世界》是一款非常流行的游戏,不过网上大多都是用unity还原实现的。那么用cocos实现一版,会是怎样的开发体验呢? 使用版本 使用最新的cocos creator 3.6.2版本 目前主要功能 生成地形方块创建与销毁角色移动、碰撞、重力和简单…

Java-MySQL-SQL函数

SQL函数 函数介绍 函数是 SQL 的一个非常强有力的特性,函数能够用于下面的目的: ● 执行数据计算 ● 修改单个数据项 ● 操纵输出进行行分组 ● 格式化显示的日期和数字 ● 转换列数据类型 SQL 函数有输入参数,并且总有一个返回值。 …

【云原生系列CKA备考】Kubernetes架构

目录前言一、Kubernetes架构1.1Master节点1.2 Node节点1.3 Add-ons1.3 Kubeadm二、相关命令2.1 查看组件运行状态2.2 kubeadm容器化组件三、总结前言 ​ OpenStack是管理虚拟机的,底层依靠虚拟化技术;kubernetes是管理容器的,底层也是依靠虚…

juery笔记

文章目录Jquery一、什么是 jQuery二、如何使用 jQuery三、如何选择 jQuery 版本四、jQuery 的运行原理实例方法1、一般通过一个字符串来标识匹配的元素2、支持多个选择器任意组合使用3、jQuery 特有的选择器,当然也可以和其他选择器任意组合使用4、元素筛选&#xf…

基于OpenGL的地形建模技术的研究与实现

毕业论文 基于OpenGL的地形建模技术的研究与实现 诚信声明 本人郑重声明:本设计(论文)及其研究工作是本人在指导教师的指导下独立完成的,在完成设计(论文)时所利用的一切资料均已在参考文献中列出。 本人…

代码随想录训练营第50天|LeetCode 123.买卖股票的最佳时机III、188.买卖股票的最佳时机IV

参考 代码随想录 题目一:LeetCode 123.买卖股票的最佳时机III 确定dp数组下标及其含义 某一天最多存在5个状态: j 0:没有操作j 1:第一次买入j 2:第一次卖出j 3:第二次买入j 4:第二次卖出…

[附源码]Python计算机毕业设计SSM基于JAVA线上订餐系统(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

安卓电子名片管理器的设计与实现

毕业设计 安卓电子名片管理器的设计与实现 诚信申明 本人郑重声明:本设计(论文)及其研究工作是本人在指导教师的指导下独立完成的,在完成设计(论文)时所利用的一切资料均已在参考文献中列出。 本人签名&…

789. 数的范围

目录 题目:​编辑 题目思路: 解释: 方法: 对于k值所在左边界: 对于k值所在右边界: 代码详解: 题目: 链接:789. 数的范围 - AcWing题库https://www.acwing.com/prob…

【在SpringBoot项目中执行修改相册数据--MSC层】

目录 1. 编辑相册--执行修改--Mapper层 2. 编辑相册--执行修改--Service层 3. 编辑相册--执行修改--Controller层 1. 编辑相册--执行修改--Mapper层 执行修改相册使用已有的update()即可。 另外,还需要检查“提交修改的名称,是不是其它数据的名称”…

基于Pyqt5和PaddleOCR实现PDF转DOC

在上一篇文章《基于Pyqt5实现笔记本摄像头拍照及PaddleOCR测试》的基础上,继续做了个简单的扩展: 将PDF文档转换为DOC文档。 一、界面增加一个按钮,如下图: 二、源码修改 1、paddleocr.py文件直接拷贝 Github下载的源码PaddleO…

DBCO-PEG-Cholesterol,Cholesterol-PEG-DBCO,胆固醇-聚乙二醇-二苯并环辛炔

DBCO-PEG-Cholesterol属于高分子点击试剂,胆固醇PEG-DBCO是一种具有DBCO反应基团的亲脂性PEG衍生物。DBCO-PEG试剂在水缓冲液中具有快速动力学和稳定性,可用于标记具有高特异性和反应性的叠氮化物修饰的生物分子。 西安凯新生物科技有限公司​点击类化学…

写了个tooltip的切换动画,个人感觉比一些组件库的渐变动画好看

最近修改了个语言切换框的tooltip的切换动画&#xff0c;感觉比element-plus或者其他组件库的tooltip的切换动画好看一些&#xff0c;看起来比较灵动&#xff0c;下面将代码分享出来。 <!DOCTYPE html> <html lang"en"><head><meta charset&quo…

Linux内核调试技术之kprobes(1)基本原理与使用

概述 Linux kprobes技术是一种可以跟踪内核函数执行状态的轻量级内核调试技术&#xff0c;利用kprobes技术可以在运行的内核中动态的插入探测点&#xff0c;当内核运行到该探测点后可以执行用户预定义的回调函数&#xff0c;以收集所需的调试状态信息而基本不影响内核原有的执…

XXL-JOB详解(整合springboot)保姆级教程

文章目录XXL-JOB简介XXL-JOB是什么为什么需要任务调度平台&#xff0c;而不用传统的 Timer 与 Quartz为什么选择XXL-JOB&#xff0c;不选择elasticjob学习之前必看&#xff0c;少走很多弯路安装XXL-JOB一、源码编译&#xff08;Windows&#xff09;1、拉取源码&#xff1a;[xxl…

NR HARQ(二) CBG HARQ-ACK codebook

这篇开始看下HARQ-ACK codebook的相关内容&#xff0c;先看CBG-based HARQ-ACK codebook。那第一个关注点就是CBG 的划分规则&#xff0c;这部分内容主要在38.213 9.1.1章节中&#xff0c;PDSCH和PUSCH 的CBG 划分规则基本是一样的&#xff0c;这里以PDSCH为例介绍。 PDSCH 和P…

MyBatis-Plus之通用枚举

系列文章目录 Mybatis-PlusSpringBoot结合运用_心态还需努力呀的博客-CSDN博客MyBaits-Plus中TableField和TableId用法_心态还需努力呀的博客-CSDN博客 MyBatis-Plus分页查询&#xff08;快速上手运用&#xff09;_心态还需努力呀的博客-CSDN博客_mybatis plus分页查询 MyBa…