写代码这么多年,或多或少的一定见过serializable/serialUID很多次,但是从来没看到再哪调用的它.真的是个很神奇的存在.
下面就来说说serialize的神奇存在:
1.首先我们来看下serializable接口源码:
public interface Serializable {
}
是的,没看错.什么也没有.那他到底有什么用呢,又用在何处呢?
/**
* Serializability of a class is enabled by the class implementing the
* java.io.Serializable interface. Classes that do not implement this
* interface will not have any of their state serialized or
* deserialized.
...
*/
这是serializable接口的注释,大致意思是说,只有实现了serializable接口,才具有序列化和反序列化的能力.
那么什么是序列化和反序列化呢,
我们都知道字节传输有两种形式:
1)二进制;
2)文本
这就涉及到一个重要的概念:网络协议.
网络协议最常用的就是文本协议和二进制协议.
比方说,我们常用的json就是文本协议,01序列字节流就是二进制协议.
我们通常在网络请求和数据存储在文件或者磁盘上时,都是由二进制流进行的,而二进制数据的传输和存储需要支持序列化才能执行.
所以,serializable不起眼却有大用处。