关于接口、关于序列化

最近工作大量用到接口编程,还有序列化问题,就在网上看了很多的资料,做了一些整理,姑且,称为组合创新吧~~

感谢被引用的很多作者,谢谢你们无私的分享,后辈才能快速学习。


(1)为什么不把所以类都标为可序列化?

之所以需要标记某个类是序列化的,而不是把所有的类都设为可序列化,就是告诉编译器我需要该类能够实现序列化,我甘愿承担该类序列化所带来的信息泄露等风险。就像C中的类型转换,有些需要显示的强转,其实就是个标记,告诉编译器我知道这么做的风险,你别担心!而且有些类序列化是没有意义的,比如Thread,把它序列化,然后调到虚拟机运行有什么用呢?

 

 

(2)标记接口

只有一个接口名,不包含任何方法,这种接口被称作标记接口(tagging inteface)java.io.Serializable就是标记接口,同样jdkjava.lang.Cloneablejava.util.RandomAccessjava.util.EventListenerjava.rmi.Remote等这些都是标记接口。标记接口的作用是做类型识别。

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

标接口在Java语言中有一些很著名的应用,比如java.io.Serializablejava.rmi.Remote等接口便是标识接口。标识接口,当一个类实现了一个标识接口之后就像是给自己打了个标签打个比喻,不是很恰当。就像是一个人穿了件名牌衣服(实现了标识接口),别人一看他穿的衣服(标识接口)就知道他的品味、身份(特性)。

 

其实在OO的世界中,空接口可以算是最高的抽像。

 

(3)序列化和反序列化是IO的知识:

 

对象的序列化和发序列化

1、对象序列化,就是把Object转换成byte序列,反之叫对象的反序列化

2、序列化流(ObjectOuputStream----- writeObject

         反序列化流(ObjectInputStream------ readObject

3、序列化接口(Serializable)对象必须实现序列化接口,才实现序列化负责将出现异常。


你可能感兴趣的:(Java)