JDK序列化原理问题之Hessian框架不支持writeObject/readObject方法如何解决

简介: JDK序列化原理问题之Hessian框架不支持writeObject/readObject方法如何解决

问题一:为什么Hessian框架不支持writeObject/readObject方法?


为什么Hessian框架不支持writeObject/readObject方法?


参考回答:

Hessian框架不支持writeObject/readObject方法,主要是因为它在序列化对象时会忽略这两个方法。这导致在实际场景中,很多定义了这两个方法的对象在序列化时会出现状态不一致的错误。因为一些重要的数据字段可能被标记为transient,在writeObject方法中进行特殊处理,而Hessian直接序列化所有非transient字段,可能会丢失数据。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/654745


问题二:Kryo框架在处理定义了JDK自定义序列化方法的对象时有什么问题?


Kryo框架在处理定义了JDK自定义序列化方法的对象时有什么问题?


参考回答:

Kryo框架为了保证序列化的正确性,在遇到定义了writeObject/readObject等JDK自定义序列化方法的对象时,会调用JDK的ObjectOutputStream和ObjectInputStream进行序列化。这种方式存在性能差、数据膨胀以及引用表不一致等问题。具体来说,JDK序列化性能很差,会导致Kryo序列化性能大幅退化;JDK序列化结果很大,会导致Kryo序列化数据膨胀;同时,转发给JDK序列化的对象子图不会跟Kryo共享同一个引用表,如果该子图共享或循环引用了其它对象,则会出现重复序列化或递归栈溢出的问题。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/654746


问题三:Jsonb和Fst框架存在哪些问题?


Jsonb和Fst框架存在哪些问题?


参考回答:

Jsonb框架不支持任何JDK自定义序列化方法,如果尝试反序列化这样的对象,会报错。而Fst框架则不支持类型前后兼容,这意味着在服务化场景中,如果对象的类型发生了变化,可能会导致序列化和反序列化失败。因此,这两个框架在某些特定场景下可能存在使用限制。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/654747


问题四:Hessian和Kryo是否支持父子类中存在重名字段的情况?


Hessian和Kryo是否支持父子类中存在重名字段的情况?


参考回答:

Hessian和Kryo在处理父子类中存在重名字段的情况时都存在问题。这两种框架可能无法正确处理这种情况,导致序列化或反序列化过程中的数据错误或丢失。因此,在某些特定条件下,这也会成为它们的使用限制。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/654748


问题五:Fury早期版本和新版本在序列化流程上有何不同?


Fury早期版本和新版本在序列化流程上有何不同?


参考回答:

Fury早期版本的序列化流程与Kryo类似,在遇到支持JDK自定义序列化方法的对象时,会调用JDK的ObjectOutputStream和ObjectInputStream进行序列化。而新版本(0.9.2版本及以后)则提供了一套基于JIT动态编译的100%兼容JDK自定义序列化的实现,性能得到了数量级的提升。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/654749

相关文章
|
1月前
|
人工智能 Java 测试技术
JDK11下Mock框架进化:从PowerMockito到Mockito Only
本文探讨了从使用PowerMock的测试环境迁移到仅使用Mockito(Mockito Only)策略的必要性和实践方法。
|
2月前
|
API
JDK8的stream有求和方法吗?
【8月更文挑战第20天】JDK8的stream有求和方法吗?
47 3
|
2月前
|
缓存 Java
JDK序列化原理问题之Fury如何实现与JDK序列化100%兼容的如何解决
JDK序列化原理问题之Fury如何实现与JDK序列化100%兼容的如何解决
|
2月前
|
Java
JDK序列化原理问题之在JDK序列化中不同JDK版本字段不一致的情况如何解决
JDK序列化原理问题之在JDK序列化中不同JDK版本字段不一致的情况如何解决
|
22天前
|
Java
安装JDK18没有JRE环境的解决办法
安装JDK18没有JRE环境的解决办法
|
2月前
|
Java 关系型数据库 MySQL
"解锁Java Web传奇之旅:从JDK1.8到Tomcat,再到MariaDB,一场跨越数据库的冒险安装盛宴,挑战你的技术极限!"
【8月更文挑战第19天】在Linux上搭建Java Web应用环境,需安装JDK 1.8、Tomcat及MariaDB。本指南详述了使用apt-get安装OpenJDK 1.8的方法,并验证其版本。接着下载与解压Tomcat至`/usr/local/`目录,并启动服务。最后,通过apt-get安装MariaDB,设置基本安全配置。完成这些步骤后,即可验证各组件的状态,为部署Java Web应用打下基础。
43 1
|
2月前
|
Oracle Java 关系型数据库
Mac安装JDK1.8
Mac安装JDK1.8
377 4
|
3月前
|
Java Linux
Linux复制安装 jdk 环境
Linux复制安装 jdk 环境
60 3
|
1天前
|
Oracle Java 关系型数据库
jdk17安装全方位手把手安装教程 / 已有jdk8了,安装JDK17后如何配置环境变量 / 多个不同版本的JDK,如何配置环境变量?
本文提供了详细的JDK 17安装教程,包括下载、安装、配置环境变量的步骤,并解释了在已有其他版本JDK的情况下如何管理多个JDK环境。
5 0
|
2月前
|
Java 开发工具
开发工具系列 之 同一个电脑上安装多个版本的JDK
这篇文章介绍了如何在一台电脑上安装和配置多个版本的JDK,包括从官网下载所需JDK、安装过程、配置环境变量以及如何查看和切换当前使用的JDK版本,并提到了如果IDEA和JDK版本不兼容时的解决方法。
开发工具系列 之 同一个电脑上安装多个版本的JDK