private static final long serialVersionUID = 1L;
具体的序列化过程是这样的:java
serialVersionUID有两种显示的生成方式: spa
状况一:假设Person类序列化以后,从A端传输到B端,而后在B端进行反序列化。code
Exception in thread "main" java.io.InvalidClassException: com.sf.code.serial.Person; local class incompatible: stream classdesc serialVersionUID = 1234567890, local class serialVersionUID = 123456789 at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:621) at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1623) at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1518) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1774) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371) at com.sf.code.serial.DeserialTest.main(DeserialTest.java:13)
状况二:假设两处serialVersionUID一致,对象
状况三:假设两处serialVersionUID一致,若是B端减小一个字段,A端不变,会是什么状况呢?接口
状况四:假设两处serialVersionUID一致,若是B端增长一个字段,A端不变,会是什么状况呢?it
说明序列化,反序列化正常,B端新增长的int字段被赋予了默认值0。io