Android中的序列化Serializable和Parcelable
2017-06-04 13:52
351 查看
一简介
二Serializable接口
三Parcelable接口
IPC主要包含三个方面:Serializable接口、Parcelable接口和Binder;
Android中可Serializable接口和Parcelable接口来对对象进行序列化;
其中serialVersionUID并不是必要的,不声明serialVersionUID也可以实现序列化,但是会对反序列化造成影响;
把对象转换为字节序列的过程称为对象的序列化;把字节序列恢复为对象的过程称为对象的反序列化。
数据传递如下:
1、复写describeContents()方法和writeToParcel() 方法;
2、实例化静态内部对象CREATOR,实现接口Parcelable.Creator<T> 。
所以一个类实现Parcelable接口最初是这样的:
我们要做的就是写己需要的构造方法,写一下私有变量的get和set。如下所示:
注意:writeToParcel()方法中write的顺序要和User(Parcel in)中read的顺序一致。
那么Serializable和Parcelable该如何选择呢?
Serializable是Java中的序列化接口,使用起来简单但是开销很大,序列化和反序列化过程需要大量的I/O操作;
Parcelable是Android中的序列化方式,因此更适用与Android平台上,缺点就是使用起来比较麻烦,但是效率很高。
Parcelable主要用在内存序列化上;如果要将对象序列化到 存储设备 中或者 通过网络传输 建议使用Serializable。
二Serializable接口
三Parcelable接口
一、简介
IPC是Inter-Process Communication的缩写,含义为进程间通信或跨进程通信,是指两个进程之间进行数据交换的过程;IPC主要包含三个方面:Serializable接口、Parcelable接口和Binder;
Android中可Serializable接口和Parcelable接口来对对象进行序列化;
二、Serializable接口
Serializable是java提供的一个序列化接口,他是一个空接口,为对象提供标准的序列化和反序列化操作。Serializable使用很简单,只需该类实现Serializable接口,并声明一个serialVersionUID。如下所示:public class User implements Serializable { private static final long serialVersionUID = 7382351359868556980L; private String name; private int age; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
其中serialVersionUID并不是必要的,不声明serialVersionUID也可以实现序列化,但是会对反序列化造成影响;
把对象转换为字节序列的过程称为对象的序列化;把字节序列恢复为对象的过程称为对象的反序列化。
数据传递如下:
Intent intent = new Intent(this,MainActivity.class); User user = new User(); user.setName("wzc"); user.setAge(22); intent.putExtra("wzc",user); startActivity(intent);
三、Parcelable接口
Parcelable也是个接口,实现这个接口需要1、复写describeContents()方法和writeToParcel() 方法;
2、实例化静态内部对象CREATOR,实现接口Parcelable.Creator<T> 。
所以一个类实现Parcelable接口最初是这样的:
public class User implements Parcelable{ protected User(Parcel in) { } public static final Creator<User> CREATOR = new Creator<User>() { @Override public User createFromParcel(Parcel in) { return new User(in); } @Override public User[] newArray(int size) { return new User[size]; } }; @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { } }
我们要做的就是写己需要的构造方法,写一下私有变量的get和set。如下所示:
package com.wzc.demo.user; import android.os.Parcel; import android.os.Parcelable; /** * Created by Wzc on 2017/6/4 0004. */ public class User implements Parcelable{ private String name; private int age; private String sex; public User(String name, int age, String sex) { this.name = name; this.age = age; this.sex = sex; } public static final Creator<User> CREATOR = new Creator<User>() { @Override public User createFromParcel(Parcel in) { return new User(in); } @Override public User[] newArray(int size) { return new User[size]; } }; @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(name); dest.writeInt(age); dest.writeString(sex); } protected User(Parcel in) { name = in.readString(); age = in.readInt(); sex = in.readString(); } }
注意:writeToParcel()方法中write的顺序要和User(Parcel in)中read的顺序一致。
方法 | 功能 | 标记位 |
---|---|---|
createFromParcel(Parcel in) | 从序列化后的对象中创建原始对象 | |
newArray(int size) | 创建指定长度的原始对象数组 | |
User(Parcel in) | 从序列化后的对象中创建原始对象 | |
writeToParcel(Parcel dest, int flags) | 将当前对象写入序列化结构中,其中flags标识有两种值0或1;为1时:标识当前对象需要作为返回值返回,不能立即释放资源,几乎所有情况都为0 | PARCELABLE_WRITE_RETURN_VALUE |
describeContents() | 返回当前对象的内容描述。如果含有文件描述符,返回1,否则返回0,几乎所以情况都是返回0 | CONTENTS_FILE_DESCRIPTOR |
Serializable是Java中的序列化接口,使用起来简单但是开销很大,序列化和反序列化过程需要大量的I/O操作;
Parcelable是Android中的序列化方式,因此更适用与Android平台上,缺点就是使用起来比较麻烦,但是效率很高。
Parcelable主要用在内存序列化上;如果要将对象序列化到 存储设备 中或者 通过网络传输 建议使用Serializable。
相关文章推荐
- Android中Intent传递序列化对象的两种方法(Serializable,Parcelable)
- Android -- 序列化Parcelable与Serializable区别及用法
- Android中Serializable和Parcelable序列化对象
- [Android] Android使用序列化接口Parcelable、Serializable
- [Android] Android使用序列化接口Parcelable、Serializable
- Java 序列化对象Serializable 与 Android 序列化对象Parcelable
- Android序列化——Serializable与Parcelable
- Android序列化:Parcelable/Serializable
- Android使用序列化接口Parcelable、Serializable
- Android中Serializable和Parcelable序列化对象详解
- Android开发:使用序列化接口Parcelable、Serializable实现Activity间传递复杂数据类型参数
- Android 实现序列化:Parcelable和Serializable接口的用法
- Android 序列化 Parcelable和Serializable 浅谈
- android:--Serializable和Parcelable两种序列化
- Android序列化之Serializable和Parcelable
- Android-序列化,Parcelable,Serializable
- android序列化Serializable、Parcelable(一)
- Android中使用Serializable和Parcelable实现序列化详解(含实例)
- Android中两种序列化方式的比较Serializable和Parcelable
- Android使用序列化接口Parcelable、Serializable