Android中的序列化Serializable和Parcelable
来源:互联网 发布:福建省政和县农村淘宝 编辑:程序博客网 时间:2024/05/14 08:44
- 一简介
- 二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的顺序一致。
那么Serializable和Parcelable该如何选择呢?
- Serializable是Java中的序列化接口,使用起来简单但是开销很大,序列化和反序列化过程需要大量的I/O操作;
- Parcelable是Android中的序列化方式,因此更适用与Android平台上,缺点就是使用起来比较麻烦,但是效率很高。
Parcelable主要用在内存序列化上;如果要将对象序列化到 存储设备 中或者 通过网络传输 建议使用Serializable。
0 0
- Android中的Serializable和Parcelable序列化
- Android中的序列化Serializable和Parcelable
- android序列化 Parcelable和Serializable接口
- Android序列化:Serializable和Parcelable详解
- Android 序列化 Parcelable和Serializable 浅谈
- Android序列化Serializable和Parcelable区别
- Android序列化parcelable和 serializable分析
- Android序列化:Serializable和Parcelable
- Android序列化-Serializable和Parcelable
- Android序列化问题-Parcelable和Serializable
- Android对象序列化:Serializable和Parcelable
- Android序列化:Serializable和Parcelable
- Android 序列化之Serializable和Parcelable
- Android-序列化,Parcelable,Serializable
- Android Serializable Parcelable 序列化
- Android 序列化Serializable、Parcelable
- Android序列化:Serializable & Parcelable
- Android序列化Parcelable、Serializable
- Oracle在中文环境下出现乱码解决办法
- Linux配置无线网卡驱动实现无线上网
- Putty SSH简单使用
- servlet规范之ServletRequest中getAttribute和getParameter方法的区别
- Oracle 11g 7个压缩包说明
- Android中的序列化Serializable和Parcelable
- Centos|RHEL7以前解决网卡eth0相关问题
- 文章标题
- ssh配置文件ssh_config和sshd_config区别
- 删除root子目录,如何恢复子目录配置文件
- maven项目的创建
- TAR命令详解
- 九度OJ-1458:汉诺塔III
- Centos|Rhel搭建vsftp