美文网首页JAVA
序列化的方式

序列化的方式

作者: 芒鞋胜马 | 来源:发表于2018-04-03 09:42 被阅读105次
  什么是序列化?

把Java对象转换为字节序列,并存储至一个储存媒介的过程。

什么是反序列化?

把字节序列恢复为Java对象的过程。

简单说法是:序列化把当前对象信息保存下来。反序列化刚好相反的操作,即读取信息设置到当前对象上。

序列化作用

1)永久性保存对象,保存对象的字节序列到本地文件中;
  2)通过序列化对象在网络中传递对象;
  3)通过序列化在进程间传递对象。

安卓里面的两种序列化的方式:

    Serializable 和 Parcelable 接口可以完成对象的序列化过程:
  
  具体作用:

1、通过Intent 和 Binder 传输数据时就需要使用
  2、需要将对象持久化到存储设备上或者通过网络传输给其他客户端

两者的区别
android上应该尽量采用Parcelable,效率至上

编码上:

Serializable代码量少,写起来方便

Parcelable代码多一些

效率上:

Parcelable的速度比Serializable 高十倍以上

serializable的迷人之处在于你只需要对某个类以及它的属性实现Serializable 接口即可。Serializable 接口是一种标识接口(marker interface),这意味着无需实现方法,Java便会对这个对象进行高效的序列化操作。

这种方法的缺点是使用了反射,序列化的过程较慢。这种机制会在序列化的时候创建许多的临时对象,容易触发垃圾回收。

Parcelable方式的实现原理是将一个完整的对象进行分解,而分解后的每一部分都是Intent所支持的数据类型,这样也就实现传递对象的功能了

  1)在使用内存的时候,Parcelable比Serializable性能高,所以推荐使用Parcelable。

2)Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC。

3)Parcelable不能使用在要将数据存储在磁盘上的情况,因为Parcelable不能很好的保证数据的持续性在外界有变化的情况下。尽管Serializable效率低点,但此时还是建议使用Serializable。

4)Serializable的实现,只需要implements Serializable 即可。这只是给对象打了一个标记,系统会自动将其序列化。

5)Parcelabel的实现,不仅需要implements Parcelabel,还需要在类中添加一个静态成员变量CREATOR,这个变量需要实现 Parcelable.Creator 接口。

6) Parcelable的性能比Serializable好,在内存开销方面较小,所以在内存间数据传输时推荐使用Parcelable,如activity间传输数据,而Serializable可将数据持久化方便保存,所以在需要保存或网络传输数据时选择Serializable,因为android不同版本Parcelable可能不同,所以不推荐使用Parcelable进行数据持久化

相关文章

网友评论

    本文标题:序列化的方式

    本文链接:https://www.haomeiwen.com/subject/gniicftx.html