一、序列化是干什么的?
内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来。
二、什么情况下序列化
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