序列化Serializable
作用
1.当2个进程在进行远程通信时,相互发送数据,数据都是以二进制的形式传送的。如果我们要传输对象的话,就需要把对象转化为字节数组(二进制数据),接收方接收后反序列成对象。目的在于,传送对象的状态,也就是属性值
2.反序列化后的对象还可以保存到硬盘上。
实现方式
1.实现Serializable
接口。
2.实现Serializable
接口,并增加void writeObject(ObjectOutputStream out) throws IOException
与void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException
这2个方法来自定义某些属性的序列化。
3.实现Externalizable
接口(该接口继承自Serializable
接口),并重写writeExtername
与readExternal
方法来完全自定义要序列化的属性。
显式定义serialVersionUID
属性的作用
1.对于一个要进行序列化的类,我们希望类的不同版本对序列化兼容(这个类可能前前后后对字段进行删改),如果不显式设置id,这个类的每个版本的id(由系统生成)都是不一样的。那么反序列化的时候,永远只能反序列化最新的实例了(旧的实例因为id不一致将失败)。
2.所以要保证兼容的话,就需要设置一个显式的id。那么在序列化旧的实例时,新添加的或更改的字段会被设置为null,删除的字段不设置。
3.如果我们不想兼容不同版本,我们还可以为不同的版本再设置一个版本号。在序列化和反序列化的过程中(自定义序列化),我们还可以根据版本号来选择性的序列化那些变化的属性的状态。
在springmvc里,javabean都要实现Serializable
接口,并生成显式id
其目的就是我们上面分析的序列化的作用以及显式id的作用,特别是在远程服务调用的项目中。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。