Java中的序列化tips

序列化Serializable

做用 java

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

2.反序列化后的对象还能够保存到硬盘上。数组

实现方式mvc

1.实现Serializable接口。code

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,删除的字段不设置。it

3.若是咱们不想兼容不一样版本,咱们还能够为不一样的版本再设置一个版本号。在序列化和反序列化的过程当中(自定义序列化),咱们还能够根据版本号来选择性的序列化那些变化的属性的状态。

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

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

相关文章
相关标签/搜索