其实,为啥要说这两个东东呢? 因为这两个东东在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来实现序列化。
到此,就介绍完成啦。大家可以去尝试一下





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

3821

被折叠的 条评论
为什么被折叠?



