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

相关文章
|
5月前
|
XML JSON 编解码
从JSON到Protobuf,深入序列化方案的选型与原理
序列化是数据跨边界传输的“翻译官”,将结构化数据转为二进制流。JSON可读性强但冗余大,Protobuf高效紧凑、性能优越,成主流选择。不同场景需权衡标准化与定制优化,选最合适方案。
408 3
Spring5入门到实战------9、AOP基本概念、底层原理、JDK动态代理实现
这篇文章是Spring5框架的实战教程,深入讲解了AOP的基本概念、如何利用动态代理实现AOP,特别是通过JDK动态代理机制在不修改源代码的情况下为业务逻辑添加新功能,降低代码耦合度,并通过具体代码示例演示了JDK动态代理的实现过程。
Spring5入门到实战------9、AOP基本概念、底层原理、JDK动态代理实现
|
缓存 Java
JDK序列化原理问题之Fury如何实现与JDK序列化100%兼容的如何解决
JDK序列化原理问题之Fury如何实现与JDK序列化100%兼容的如何解决
320 0
JDK序列化原理问题之在JDK序列化中不同JDK版本字段不一致的情况如何解决
JDK序列化原理问题之在JDK序列化中不同JDK版本字段不一致的情况如何解决
270 0
安装JDK18没有JRE环境的解决办法
安装JDK18没有JRE环境的解决办法
1409 141
|
7月前
|
存储 Ubuntu 安全
在Ubuntu 16.04上安装openjdk-6/7/8-jdk的步骤
在整个安装过程中,你可能需要管理员权限,因此你可能要使用 `sudo` 来获取必要的权限。记得做完每一个步骤后,都要检查输出,以确保没有发生错误,并且每项操作都成功完成。如果在安装过程中遇到问题,查看 `/var/log/` 下的日志文件对于问题的解决可能是有帮助的。
492 21
|
7月前
|
IDE Ubuntu Java
在Ubuntu18.04安装兼容JDK 8的Eclipse集成开发环境的指南。
完成以上步骤后,您将在Ubuntu 18.04系统上成功安装并配置了Eclipse IDE,它将与JDK 8兼容,可以开始进行Java开发工作。如果遇到任何问题,请确保每一步骤都正确执行,并检查是否所有路径都与您的具体情况相匹配。
296 11
|
9月前
|
Java 关系型数据库 MySQL
在Linux平台上进行JDK、Tomcat、MySQL的安装并部署后端项目
现在,你可以通过访问http://Your_IP:Tomcat_Port/Your_Project访问你的项目了。如果一切顺利,你将看到那绚烂的胜利之光照耀在你的项目之上!
473 41
|
6月前
|
Ubuntu Java Android开发
在Ubuntu 18.04上安装与JDK 8兼容的Eclipse版本的步骤。
安装过程结束后,您就可以开始使用Eclipse来开发您的Java项目了,并且确保它与JDK 8兼容无误。这个过程涉及的是一个基本的安装流程,针对使用Java 8的用户,Eclipse的其他配置和插件安装根据个人开发环境和需求来定制。
446 0