Android序列化接口Parcelable与Serializable接口对比

作者:小尹编码中... 时间:2023-03-24 17:48:59 

Parcelable

优点:

  • google专门为安卓写的序列化接口

  • 性能好,内存开销小,效率高,写起来复杂

缺点:

  • 各个机型可能有差异,Parcelable使用会产生差异

  • 通讯组件之间(AIDL ,INTENT)的数据传递,可以使用Parcelable

  • 写入存储设备推荐使用Serializable

public class MyParcelable implements Parcelable {
*     private int mData;//参数
*     public int describeContents() {//类描述,一般不管他
*         return 0;
*     }
*     public void writeToParcel(Parcel out, int flags) {//序列化 :out写入参数,要注明参数类型 flag一般默认是0,1代表对象需要返回,不回收
*         out.writeInt(mData);
*     }
*     public static final Parcelable.Creator<MyParcelable> CREATOR//反序列化操作
*             = new Parcelable.Creator<MyParcelable>() {
*         public MyParcelable createFromParcel(Parcel in) {
*             return new MyParcelable(in);
*         }
*         public MyParcelable[] newArray(int size) {
*             return new MyParcelable[size];
*         }
*     };
*     private MyParcelable(Parcel in) {
*         mData = in.readInt();
*     }
* }

google官方也是很贴心呀,直接把怎么用放在源码的注释里了

Serializable

优点:

  • java自带的序列化接口

  • Serializable是一个空接口,使用简单,是一个标识,会给类一个序列化UID

缺点:

  • 因为使用的是反射,使用性能差,内存开销大

package java.io;
// Android-added: Notes about serialVersionUID, using serialization judiciously, JSON.
public interface Serializable {
}

Serializable 是一个空接口,用来标识当前类可以被 ObjectOutputStream序列化,以及被ObjectInputStream反序列化

Parcelable与Serializable的性能比较

  • 在内存的使用中,Parcelable在性能方面要强于Serializable

  • Serializable在序列化操作的时候会产生大量的临时变量,(原因是使用了反射机制)从而导致GC的频繁调用,因此在性能上会稍微逊色

  • Parcelable是以Ibinder作为信息载体的,在内存上的开销比较小,因此在内存之间进行数据传递的时候,Android推荐使用Parcelable

  • 在读写数据的时候,Parcelable是在内存中直接进行读写,而Serializable是通过使用IO流的形式将数据读写入在硬盘上

  • 虽然Parcelable的性能要强于Serializable,但是仍然有特殊的情况需要使用Serializable,而不去使用Parcelable,因为Parcelable无法将数据进行持久化,因此在将数据保存在磁盘的时候,仍然需要使用后者,因为前者无法很好的将数据进行持久化 (原因是在不同的Android版本当中,Parcelable可能会不同,因此数据的持久化方面仍然是使用Serializable)

总结:

  • Java应用程序中有Serializable来实现序列化操作

  • Android中有Parcelable来实现序列化操作   

  • 在Android中除了对数据持久化的时候需要使用到Serializable来实现序列化操作,其他的时候我们仍然需要使用Parcelable来实现序列化操作

  • 在Android中效率并不是最重要的,而是内存, 通过比较Parcelable在效率和内存上强于Serializable

个人小建议:

尽管Parcelable实现起来比较复杂,但是如果我们想要成为一名优秀的Android软件工程师,那么我们就需要勤快一些去实现Parcelable,而不是偷懒与实现Serializable,当然实现Serializable也可以

来源:https://blog.csdn.net/Ai1114/article/details/125246559

标签:Android,Parcelable,Serializable,序列化接口
0
投稿

猜你喜欢

  • 利用@Value注解为bean的属性赋值方法总结

    2023-10-15 19:54:06
  • 浅谈Glide缓存key的问题

    2023-10-05 05:26:35
  • 详解Java中的println输入和toString方法的重写问题

    2022-12-24 05:26:33
  • Java实现简单无界面五子棋

    2022-07-10 12:06:02
  • Android保持屏幕常亮2种实现方法

    2022-09-08 11:22:43
  • 掌握Android Handler消息机制核心代码

    2023-11-29 18:29:23
  • android实现在横竖屏切换时页面信息不被重置的示例分享

    2021-06-20 08:45:46
  • Java利用Swagger2自动生成对外接口的文档

    2023-03-31 03:22:38
  • C#中timer定时器用法实例

    2023-01-23 02:23:17
  • JavaEE微框架Spring Boot深入解读

    2021-07-31 14:24:55
  • java贪吃蛇游戏编写代码

    2023-06-16 02:41:10
  • SpringBoot+Eureka实现微服务负载均衡的示例代码

    2021-09-19 07:10:13
  • Java中的内部类使用详情

    2022-07-24 05:09:38
  • java统计文件中每个字符出现的个数

    2021-12-22 06:43:42
  • C# JsonHelper 操作辅助类,拿来直接用

    2023-11-28 18:55:42
  • Java方法的参数传递机制实例详解

    2021-05-24 07:38:29
  • Java Maven settings.xml中私有仓库配置详解

    2022-02-19 15:36:50
  • Java编写简单猜数游戏

    2021-09-09 01:38:49
  • Java创建型设计模式之抽象工厂模式(Abstract Factory)

    2022-08-31 01:25:56
  • springCloud config本地配置操作

    2023-01-13 11:07:56
  • asp之家 软件编程 m.aspxhome.com