写这篇文章的起因是在面试的过程当中,别人曾问到我几个问题。
(1)java如何实现序列化的?
(2)序列化的serialVersionUID有什么作用。
(3)static修饰的变量能够序列化吗?如果不能,那么怎么样自己实现喃?
依次对于上述问题进行解答。
1.如何实现对象序列化。
(1)实现Serializable接口,并不用做任何操作。
其大致规则如上。
(2)实现Externalizable接口,Externalizable接口是继承Serializable接口的。实现了这个接口的话,你需要重写两个方法。
这就可以自定义规则了。
2.serialVersionUID的作用。
如果你不写serialVersionUID的话,那么当你使用流写入文件的时候,系统会自动计算一个serialVersionUID。在将文件读成流的时候就会去确认serialVersionUID是否一致,如果不一致的话就会产生InvalidClassException。产生不一致的原因,可能是你对这个类进行了修改或者扩充。那么这个时候就可以选择自定义一个serialVersionUID,就可以避免版本不同的问题。