关于java的序列化问题

写这篇文章的起因是在面试的过程当中,别人曾问到我几个问题。

(1)java如何实现序列化的?

(2)序列化的serialVersionUID有什么作用。

(3)static修饰的变量能够序列化吗?如果不能,那么怎么样自己实现喃?

依次对于上述问题进行解答。

1.如何实现对象序列化。

(1)实现Serializable接口,并不用做任何操作。

关于java的序列化问题

其大致规则如上。

(2)实现Externalizable接口,Externalizable接口是继承Serializable接口的。实现了这个接口的话,你需要重写两个方法。

关于java的序列化问题

这就可以自定义规则了。

2.serialVersionUID的作用。

如果你不写serialVersionUID的话,那么当你使用流写入文件的时候,系统会自动计算一个serialVersionUID。在将文件读成流的时候就会去确认serialVersionUID是否一致,如果不一致的话就会产生InvalidClassException。产生不一致的原因,可能是你对这个类进行了修改或者扩充。那么这个时候就可以选择自定义一个serialVersionUID,就可以避免版本不同的问题。