public interface Serializable?标记/标签接口

Serializable接口是一个标记接口。

什么是标记接口?

标识接口是没有任何方法和属性的接口。标识接口不对实现它的类有任何语义上的要求,它仅仅表明实现它的类属于一个特定的类型。

举个例子,标记接口就是一个产品的log,log显示了这个产品的一些信息,而对使用产品的人而言,其无关紧要。

 

--------------------------

为什么要实现这个接口呢?

序列化就是变成二进制流,比如云计算,RPC,Hadoop,特别是Hadoop完全就是分布式环境,那么就要涉及到对象要在网络中传输,里面的全是二进制流,因此对象需要变成二进制流能够在介质中进行传输,这个过程就是序列化。

实现了这个接口后,这个接口都做了什么?

告诉JVM,这个对象可以被实例化,因为它实现了Serializable这个log接口。所以当此对象需要被转换为二进制流进行传输的时候,JVM在确认实现了Serializable接口后会提供默认的序列化机制将其序列化,以便进行介质运输。

---------------------------

序列化是指将Java对象保存为二进制字节码的过程。

反序列化将二进制字节码重新转成Java对象的过程。

序列化过程中代码流程

https://blog.csdn.net/weixin_39723544/article/details/80527550

--------------------------

希望对象的某些属性不参与序列化应该怎么处理?

对象序列化之后,如果类的属性发生了增减那么反序列化时会有什么影响呢?

如果父类没有实现java.io.Serializable接口,子类实现了此接口,那么父类中的属性能被序列化吗?

serialVersionUID属性是做什么用的?必须申明此属性吗?如果不申明此属性会有什么影响?如果此属性的值发生了变化会有什么影响? 能干预对象的序列化与反序列化过程吗?

(serialVersionUID是用来进行类的版本一致性校验的,如果从其他环境中传入的二进制类对象的serialVersionUID和本地要转换的类的serialVersionUID不一致,则JVM认为此类的版本不一致,将不允许进行转换并报InvalidCastException异常。当然如果不写,JVM会自己生成一个serialVersionUID,但不同JVM生成规则是不同的,因此一定要自己手动写值)

JDK1.8 java.io.Serializable接口详解_王同林的博客-CSDN博客

 

posted @ 2021-05-24 22:34  永不熄灭的火  阅读(285)  评论(0编辑  收藏  举报