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都一样会有什么问题?

posted @   Abserver  阅读(247)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示