最近工作大量用到接口编程,还有序列化问题,就在网上看了很多的资料,做了一些整理,姑且,称为组合创新吧~~
感谢被引用的很多作者,谢谢你们无私的分享,后辈才能快速学习。
(1)为什么不把所以类都标为可序列化?
之所以需要标记某个类是序列化的,而不是把所有的类都设为可序列化,就是告诉编译器我需要该类能够实现序列化,我甘愿承担该类序列化所带来的信息泄露等风险。就像C中的类型转换,有些需要显示的强转,其实就是个标记,告诉编译器我知道这么做的风险,你别担心!而且有些类序列化是没有意义的,比如Thread,把它序列化,然后调到虚拟机运行有什么用呢?
(2)标记接口
只有一个接口名,不包含任何方法,这种接口被称作标记接口(tagging inteface),java.io.Serializable就是标记接口,同样jdk中java.lang.Cloneable,java.util.RandomAccess,java.util.EventListener,java.rmi.Remote等这些都是标记接口。标记接口的作用是做类型识别。
标识接口是没有任何方法和属性的接口。标识接口不对实现它的类有任何语义上的要求,它仅仅表明实现它的类属于一个特定的类型。
标接口在Java语言中有一些很著名的应用,比如java.io.Serializable和java.rmi.Remote等接口便是标识接口。标识接口,当一个类实现了一个标识接口之后就像是给自己打了个标签。打个比喻,不是很恰当。就像是一个人穿了件名牌衣服(实现了标识接口),别人一看他穿的衣服(标识接口)就知道他的品味、身份(特性)。
其实在OO的世界中,空接口可以算是最高的抽像。
(3)序列化和反序列化是IO的知识:
对象的序列化和发序列化
1、对象序列化,就是把Object转换成byte序列,反之叫对象的反序列化
2、序列化流(ObjectOuputStream)-----
writeObject
反序列化流(ObjectInputStream)------ readObject
3、序列化接口(Serializable)对象必须实现序列化接口,才实现序列化负责将出现异常。
版权声明:本文为博主原创文章,未经博主允许不得转载。