Java基础 (12) - 序列化

一、序列化是干什么的?

内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来。

 

二、什么情况下序列化

      a、对象需要持久化 (硬盘or数据库)

      b、网络传输 (套接字orRMI)

      c、在进程间传递对象

 

三、序列化ID的作用

java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。反序列化时,JVM会把传来的字节流中的serialVersionUID与本地实体类中的serialVersionUID进行比较,如果相同则认为是一致的,便可以进行反序列化,否则就会报序列化版本不一致的异常。

     

四、序列化机制

a、保存到磁盘的所有对象都获得一个序列号(1, 2, 3等等)

b、当要反序列化保存一个对象时,先检查该对象是否被保存了。

c、如果以前保存过,只需写入"与已经保存的类具有相同序列号的对象"的一样的标记就可,否则,保存该对象。

 

五、序列化方式

a、Serializable

b、Externalizable (类似android Parcelable)

 

六、其它

1、支持序列化和反序列化的基本类型有:String,Array,Enum和Serializable。类中的静态变量不会序列化

2、transient来修饰不想要序列化的变量

3、 反序列化 ->ObjectOutPutStream(FileOutPutStream)

 

七、Parcelable和Serializable的区别

1、在使用内存的时候Parcelable比Serializable的性能高。

   Serializable序列化会使用反射,序列化和反序列化过程需要大量 I/O 操作,会产生大量的临时变量,从而引起频繁的GC(内存回收).

 Parcelable自已实现封送和解封(marshalled &unmarshalled)操作不需要用反射

2、Parcelable只能对内存对象序列化,因为在外界的变化下Parcelable不能很好的保证数据的持续性。

如需要将对象序列化存储到文件,实现Serializable接口

 

参照:https://blog.csdn.net/qq_16628781/article/details/70049623

https://www.cnblogs.com/csguo/p/7571741.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值