Java序列化
Java序列化
Serializable
在分布式场景下,当进行远程通信时,无论是何种类型的数据,都会以二进制序列的形式在网络上传送.序列化是一种将对象转换成字节序列的过程,用于解决在对对象流进行读写操作时所引发的问题.
Java中所有要实现序列化的类都必须实现java.lang.Serializable接口,它里面没有任何方法.
序列化有如下特点:
- 如果一个类可以被序列化,那么它的子类也能够被序列化
- 由于static代表类的成员,transient代表对象的临时数据,因此被声明为这两类的数据成员是不能被序列化的
- 子类实现了序列化接口,父类没有,父类中的属性不能序列化,但子类中的属性仍可以正确序列化
Externalizable
Externalizable接口extends Serializable接口,支持自定义序列化与反序列化操作,而且在其基础上增加了两个方法:writeExternal()和readExternal()。这两个方法会在序列化和反序列化还原的过程中被自动调用,以便执行一些特殊的操作。
FAQ
-
Java中可否将A类的序列化结果反序列化为B类(A\B类部分属性值相同)?
-
序列化id-serialVersionUID的作用?
Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的
在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体(类)的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常。
类的serialVersionUID的默认值完全依赖于Java编译器的实现,对于同一个类,用不同的Java编译器编译,有可能会导致不同的serialVersionUID。
-
所有可序列化的类的序列化id都一样会有什么问题?
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构