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博客