天天看点

为什么Java需要序列化

总结

序列化:将对象转化为二进制byte流的过程

反序列化:将二进制byte流转换为对象的过程

1.实现比特流只需要实现Serializable接口即可

2.static的变量不能被序列化,因为static的变量是属于类的

3.Transient关键字,主要是控制变量是否能够被序列化。

如果没有被序列化的成员变量反序列化后,会被设置成初始值,比如String -> null

一、防止重复存储,如A a = new A(),B b = new B();如果B中包含了A的引用,在内存中,A和B是分开存储

的。如果新建了一个对象a,一个对象b,在内存中b是包含了a的拷贝,当修改a对象时候,在内存中内 部的对象a将需要从新复制a,这样造成了重复存储。

如果使用序列化:序列化机制的解决方案:

1)保存到磁盘的所有对象都获得自己的序列号(1, 2, 3等等)

2)当要保存一个对象时,先检查该对象是否被保存了。

3)如果以前保存过,只需修改”与已经保存的具有序列号x的对象相同”的标记,否则,保存该对象

java的”对象序列化”能让你将一个实现了Serializable接口的对象转换成一组二进制byte,然后每个对象有自己的序列号,当要用到这个对象时,你就能把这些byte数据恢复出来,并据此重新构建那个对象了。

二、当你想要在网络上传输对象的时候,需要将对象先转化为byte流序列,当传输过去的时候再反序列化成对象。所以,如果是跨平台的序列化,则发送方序列化后,接收方可以用任何其支持的平台反序列化成相应的版本。