序列化Serializable

作用

1.当2个进程在进行远程通信时,相互发送数据,数据都是以二进制的形式传送的。如果我们要传输对象的话,就需要把对象转化为字节数组(二进制数据),接收方接收后反序列成对象。目的在于,传送对象的状态,也就是属性值

2.反序列化后的对象还可以保存到硬盘上。

实现方式

1.实现Serializable接口。

2.实现Serializable接口,并增加void writeObject(ObjectOutputStream out) throws IOExceptionvoid readObject(ObjectInputStream in) throws IOException, ClassNotFoundException这2个方法来自定义某些属性的序列化。

3.实现Externalizable接口(该接口继承自Serializable接口),并重写writeExternamereadExternal方法来完全自定义要序列化的属性。

显式定义serialVersionUID属性的作用

1.对于一个要进行序列化的类,我们希望类的不同版本对序列化兼容(这个类可能前前后后对字段进行删改),如果不显式设置id,这个类的每个版本的id(由系统生成)都是不一样的。那么反序列化的时候,永远只能反序列化最新的实例了(旧的实例因为id不一致将失败)。

2.所以要保证兼容的话,就需要设置一个显式的id。那么在序列化旧的实例时,新添加的或更改的字段会被设置为null,删除的字段不设置。

3.如果我们不想兼容不同版本,我们还可以为不同的版本再设置一个版本号。在序列化和反序列化的过程中(自定义序列化),我们还可以根据版本号来选择性的序列化那些变化的属性的状态。

在springmvc里,javabean都要实现Serializable接口,并生成显式id

其目的就是我们上面分析的序列化的作用以及显式id的作用,特别是在远程服务调用的项目中。


柒叶
409 声望43 粉丝