Android对象序列号之Serializable与Parcelable

本文介绍了Android中序列化的两种主要方式:Serializable与Parcelable的区别及应用场景。详细解析了它们的实现过程,帮助开发者理解如何选择合适的序列化方式。

其实,为啥要说这两个东东呢? 因为这两个东东在Android中其实是非常重要的,当我们通过Intent和Binder来传输数据时我们就需要使用Parcalable或Serializable了。还有的时候,我们可能需要把对象持久化到设备里,或者是通过网络传输给服务器等,都需要用到Serializable来完成对象的序列化。既然这样,我们就来介绍介绍怎么使用这两个东东吧。

首先呢,我们来讲一讲Serializable这个接口。

Serializable 是Java所提供的一个序列化接口,它本身是一个空接口,能为对象提供标准的序列化和反序列化操作。这个接口使用起来也是很easy,只需要在声明类的时候实现一下Serializable 就可以啦。

那么,具体如何实现一个对象的序列号呢?请看下面的例子↓




上面这段代码就很好的演示了采用Serializable 方式序列化对象的过程,其实很简单,只需要把实现了Serializable 接口的User对象写到文件中就可以快速恢复了,恢复后的对象和之前的内容完全一样。

其实在我们实现Serializable 接口的时候,还需要指定一个serialVersionUID的属性,比如↓

private static final long serialVersionUID = 1L

那么这个是用来干什么用的呢?我们要明白一点,既然系统提供了这个serialVersionUID,那么他比如就是有用的。原则上序列化后的数据中的serialVersionUID只有和当前类的serialVersionUID相同才能够正常的被反序列化。

对于Serializable 接口的使用是很简单的,那么Parcelable又如何呢?我们还是来一起把他撸一撸

直接先上代码来look look!


这就是一个Parcelable的典型用法,可以看到里面用到了Parcel这个类,那么这个Parcel类有什么作用呢?Parcel内部包装了可序列化的数据,可以在Binder中自由传输。从上面的代码中可以看出来,在序列化过程中需要实现的功能有序列化、反序列化和内容描述。序列化功能由writeToParcel来完成,最终是通过Parcel中的一系列write方法来完成;反序列化功能由Creator来完成,其内部标明了如何创建序列化对象和数组,并通过一系列的read方法来完成反序列化过程。内容描述功能由describeContents方法来完成,几乎在所有情况下这个方法都应该返回0。下面附上一张关于Parcelable方法说明表↓


上面说道了Serializable和Parcelable两种方式都可以实现序列化,那么二者我们应该如何选择呢?

Serializable是Java中的序列化接口,其使用起来简单但是开销很大,序列化与反序列化都需要大量的I/O操作。

Parcelable是Android中的序列号接口,更适用于Android平台,它的确定就是使用起来稍微麻烦的,但是他的效率很高。

因此在这里还是推荐大家使用Parcelable来实现序列化。


到此,就介绍完成啦。大家可以去尝试一下大笑大笑大笑大笑大笑大笑


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值