Android 序列化原因、方法、区别

http://blog.csdn.net/wenzhi20102321/article/details/53148026

http://www.developerphil.com/parcelable-vs-serializable/    性能对比,建议看一下

https://www.jianshu.com/p/ff3416097c07

序列化原因

序列化的原因基本可以归纳为以下三种情况:

1.永久性保存对象,保存对象的字节序列到本地文件中;
2.对象在网络中传递;
3.对象在IPC间传递

序列化方法

1Serializable.首先它写代码非常简洁,但是由于它使用了Java的反射机制,所以它会比较慢,同时反射机制也会产生许多临时对象,占用了GC(Gargage Collection)活动,目前来说,反射对jvm的运算压力不是很大,主要是内存压力比较大。

2.但Parcelable有个明显的缺点:不能能使用在要将数据存储在磁盘上的情况(如:永久性保存对象,保存对象的字节序列到本地文件中),因为Parcel本质上为了更好的实现对象在IPC间传递,并不是一个通用的序列化机制,当改变任何Parcel中数据的底层实现都可能导致之前的数据不可读取,所以此时还是建议使用Serializable 。

Parcelable 和 Serializable性能对比

  • 如果只是偶尔使用的话,使用Serializable即可,忘掉它的性能影响吧
  • 判断一个函数的性能,运行上千上万遍才能看出来
  • Parcelable有着至少10X的性能。
  • 当然在你传递上千个对象的时候,必须要使用Parcelable。
  • 当你要使用反射时,你完全可以用别外一种更好的方式的实现,如代码生成器,动态语言,下面有开源库介绍。
  • 当你的程序运行缓慢的话,永远不要怪反射或者Java虚拟机,Talk is cheap,show me the code.
  • Map里实现了Serializable接口,而在Bundle实现了Parcelable的接口


猜你喜欢

转载自blog.csdn.net/androidwubo/article/details/79282458