首页 > java > java序列化问题

java序列化问题

作者:bin

1、序列化ID
序列化id不一致,导致无法反序列化。

比如有同一个服务,部署在2台机器,同一个POJO,但是用的是2个不同的序列化ID, 那么类做序列化存储时,读取出来的无法进行反序列化

A服务:

private static final long serialVersionUID = 1L;

B服务:

private static final long serialVersionUID = 2L;

 

2、静态变量

静态变量不会被序列化,序列化是保存对象的状态,静态变量是类的状态,序列化并不保存静态变量

3、父类序列化

序列化子类的时候,父类的值不会被序列化,如果父类对象也要被序列化的话,就需要父类也实现Serializable接口。

或者父类需要有默认的无参构造函数,在子类进行反序列化时,会对应去调用父类的构造函数

4、Transient关键词

关键字的作用是控制变量的序列化,在变量声明前加上该关键字,可以阻止该变量被序列化到文件中,在被反序列化后,transient 变量的值被设为初始值,如 int 型的是 0,对象型的是 null。

5、变量值加密

我们可以使用,用户自定义的 writeObject 和 readObject 方法,在其中添加加密和解密方法

6、序列化存储规则

我们将2个相同对象,进行文件存储,重复存储2次,会发现,2次存储,占用的空间,实际上并没有2倍增加,因为java序列化机制为了节省空间,实际上存的是一个引用。所以在如果2次写对象,并且对象的属性值不一样时,需要注意,2次反序列化取出的值都会是一样的,因为存的是引用

 

您必须 [ 登录 ] 才能发表留言!