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月前
|
JSON JavaScript 前端开发
|
2月前
|
Java
让星星⭐月亮告诉你,jdk1.8 Java函数式编程示例:Lambda函数/方法引用/4种内建函数式接口(功能性-/消费型/供给型/断言型)
本示例展示了Java中函数式接口的使用,包括自定义和内置的函数式接口。通过方法引用,实现对字符串操作如转换大写、数值转换等,并演示了Function、Consumer、Supplier及Predicate四种主要内置函数式接口的应用。
32 1
|
4月前
|
API
JDK8的stream有求和方法吗?
【8月更文挑战第20天】JDK8的stream有求和方法吗?
150 3
|
4月前
|
缓存 Java
JDK序列化原理问题之Fury如何实现与JDK序列化100%兼容的如何解决
JDK序列化原理问题之Fury如何实现与JDK序列化100%兼容的如何解决
|
4月前
|
Java
JDK序列化原理问题之在JDK序列化中不同JDK版本字段不一致的情况如何解决
JDK序列化原理问题之在JDK序列化中不同JDK版本字段不一致的情况如何解决
|
3月前
|
Java
安装JDK18没有JRE环境的解决办法
安装JDK18没有JRE环境的解决办法
381 3
|
1天前
|
NoSQL 关系型数据库 MySQL
Linux安装jdk、mysql、redis
Linux安装jdk、mysql、redis
39 7
|
4月前
|
Oracle Java 关系型数据库
Mac安装JDK1.8
Mac安装JDK1.8
777 4
|
4月前
|
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应用打下基础。
65 1
|
1月前
|
Oracle Java 关系型数据库
安装 JDK 时应该注意哪些问题
选择合适的JDK版本需考虑项目需求与兼容性,推荐使用LTS版本如JDK 17或21。安装时注意操作系统适配,配置环境变量PATH和JAVA_HOME,确保合法使用许可证,并进行安装后测试以验证JDK功能正常。
53 1