Serializable和Parcelable如何选择?

来源:互联网 发布:java流程图制作软件 编辑:程序博客网 时间:2024/06/06 06:49

Serializable和Parcelable如何选择?

  • serializable和parcelable都是序列化数据的,首先我们就会有第一个问题:为什么要序列化数据?序列化是为了解决对数据的读写操作问题的。那什么是序列化呢?序列化就是将对象转化成可存储或可传输的状态。在这里我们举个例子: 假如我有两个类,分别是A和B,B类中含有一个指向A类对象的引用,现在我们对两个类进行实例化{ A a = new A(); B b = new B(); },这时在内存中实际上分配了两个空间,一个存储对象a,一个存储对象b,接下来我们想将它们写入到磁盘的一个文件中去,就在写入文件时出现了问题!因为 对象b包含对对象a的引用,所以系统会自动的将a的数据复制一份到b中,这样的话当我们从文件中恢复对象时(也就是重新加载到内存中)时,内存分配了三个 空间,而对象a同时在内存中存在两份,此时,如果我想修改对象a的数据的话,那就需要搜索它的每一份拷贝来达到对象数据的一致性,显然这不是我们所 希望的!
  • 所以序列化就是为了解决这个问题而诞生的,serializable是序列化的意思,它是Java自带的,表示将一个对象转换成可存储或者可传输的状态。parcelable是Android专用的,他实现了和serializable相同的效果,那么问题又来了:既然效果一样,为什么会存在两种实现方式呢?下面就是一下两者的区别:
    parcelable之所以会诞生,是因为serializable的效率和性能太低了,serializable在进行序列化的时候会产生大量的临时变量,从而引起频繁的GC,但是parcelable在进行序列化之后不能保证数据的持续性,所以我们在选择序列化方法时一定要慎重: 在使用内存的时候,选择parcelable,性能高;在将数据保存到磁盘时使用serializable,持久拥有数据。
0 0