在JAVA中,对象的序列化和反序列化被广泛的应用到RMI(远程方法调用)及网络传输中。
实现Serializable接口 和实现Externalizable接口实现序列化、反序列化的区别:
1 类实现Serializable接口不用实现方法;类实现Externalizable接口需要实现writeExternal,readExternal方法,不然反序列后的对象不含有属性值,都是默认的初始值
2 类实现Serializable接口时无参构造函数和带参构造函数可以同时写,也可以不同时写(只写一个或都不写均可);类实现Externalizable接口时如果写了带参构造函数,则必须要写无参构造函数,不然报错
3 如果不实现Serializable 则 报错Exception in thread "main" java.io.NotSerializableException: 类路径和类名
4 无static修饰是对象属性,只用transient修饰,不序列化,反序列化后是默认值
5 有static修饰是类属性,不序列化,反序列化后是最新值
6 有static、transient同时修饰时,仍然是当作类属性处理
transient变量不会贯穿对象的序列化和反序列化,生命周期仅存于调用者的内存中而不会写到磁盘里进行持久化。
---------------------------