Android 使用Parcelable序列化对象
Android序列化对象主要有两种方法,实现Serializable接口、或者实现Parcelable接口。实现Serializable接口是Java SE自己就支持的,而Parcelable是Android特有的功能,效率比实现Serializable接口高,并且还能够用在IPC中。实现Serializable接口很是简单,声明一下就能够了,而实现Parcelable接口稍微复杂一些,但效率更高,推荐用这种方法提升性能。下面就介绍一下实现Parcelable接口的方法
经过实现Parcelable接口序列化对象的步骤:
一、声明实现接口Parcelable
二、实现Parcelable的方法writeToParcel,将你的对象序列化为一个Parcel对象
三、实例化静态内部对象CREATOR实现接口Parcelable.Creator:
- public static final Parcelable.Creator<T> CREATOR
其中public static final一个都不能少,内部对象CREATOR的名称也不能改变,必须所有大写。
四、完成CREATOR的代码,实现方法createFromParcel,将Parcel对象反序列化为你的对象
简而言之:经过writeToParcel将你的对象映射成Parcel对象,再经过createFromParcel将Parcel对象映射成你的对象。也能够将Parcel当作是一个流,经过writeToParcel把对象写到流里面,在经过createFromParcel从流里读取对象,只不过这个过程须要你来实现,所以写的顺序和读的顺序必须一致。
Parcel对象能够经过如下方法写入或读取byte, double, float, int, long, String这6种类型变量。
- writeByte(byte), readByte()
- writeDouble(double), readDouble()
- writeFloat(float), readFloat()
- writeInt(int), readInt()
- writeLong(long), readLong()
- writeString(String), readString()
也能够读取或写入他们的数组
- writeBooleanArray(boolean[]), readBooleanArray(boolean[]), createBooleanArray()
- writeByteArray(byte[]), writeByteArray(byte[], int, int), readByteArray(byte[]), createByteArray()
- writeCharArray(char[]), readCharArray(char[]), createCharArray()
- writeDoubleArray(double[]), readDoubleArray(double[]), createDoubleArray()
- writeFloatArray(float[]), readFloatArray(float[]), createFloatArray()
- writeIntArray(int[]), readIntArray(int[]), createIntArray()
- writeLongArray(long[]), readLongArray(long[]), createLongArray()
- writeStringArray(String[]), readStringArray(String[]), createStringArray()
- writeSparseBooleanArray(SparseBooleanArray), readSparseBooleanArray()
更多操做能够参阅:
http://developer.android.com/reference/android/os/Parcel.html
示例代码:
- package com.ipjmc.demo.parcelable;
-
-
- import java.util.Date;
-
- import android.os.Parcel;
- import android.os.Parcelable;
-
- public class ParcelableDate implements Parcelable { //声明实现接口Parcelable
-
- //这里定义了两个变量来讲明读和写的顺序要一致
- public long mId;
- public Date mDate;
-
- public ParcelableDate(long id, long time) {
- mId = id;
- mDate = new Date(time);
- }
-
- public ParcelableDate(Parcel source) {
- //先读取mId,再读取mDate
- mId = source.readLong();
- mDate = new Date(source.readLong());
- }
-
- @Override
- public int describeContents() {
- return 0;
- }
-
- //实现Parcelable的方法writeToParcel,将ParcelableDate序列化为一个Parcel对象
- @Override
- public void writeToParcel(Parcel dest, int flags) {
- //先写入mId,再写入mDate
- dest.writeLong(mId);
- dest.writeLong(mDate.getTime());
- }
-
- //实例化静态内部对象CREATOR实现接口Parcelable.Creator
- public static final Parcelable.Creator<ParcelableDate> CREATOR = new Creator<ParcelableDate>() {
-
- @Override
- public ParcelableDate[] newArray(int size) {
- return new ParcelableDate[size];
- }
-
- //将Parcel对象反序列化为ParcelableDate
- @Override
- public ParcelableDate createFromParcel(Parcel source) {
- return new ParcelableDate(source);
- }
- };
- }
欢迎关注本站公众号,获取更多信息