Android开发之序列化接口
2015-12-21 20:49
411 查看
1. Serializable接口:Java提供的一个序列化接口,是一个空接口,为对象提供标准的序列化和反序列化操作,实现Serializable接口并声明一个serialVersionUID(Long)就可以实现序列化,其实声明一个serialVersionUID也并不是必需的,也能实现序列化,但这会对反序列化操作会有影响
2. Parcelable接口:Android提供的一个序列化接口
下面演示一下Serializable接口的序列化以及反序列化操作:
序列化操作:
反序列化操作
现在,序列化以及反序列化比较清楚了吧!但是在这里有两点需要特别提一下:① 静态成员变量属于类不属于对象,因此序列化时并不会参与;② 使用transient关键字标记的成员变量也不参与序列化操作
下面讲讲Parcelable接口的序列化:
package com.xiaokai.entity;
import android.os.Parcel;
import android.os.Parcelable;
public class User implements Parcelable{
private int userId;
private String password;
private boolean isMale;
public User(int userId, String password, boolean isMale) {
this.userId = userId;
this.password = password;
this.isMale = isMale;
}
private User(Parcel in) {
userId = in.readInt();
password = in.readString();
isMale = in.readInt() == 1;
}
//内容描述,几乎所有情况都return 0,除非当前对象中存在文件描述符时,return 1
@Override
public int describeContents() {
return 0;
}
//序列化过程
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(userId);
dest.writeString(password);
dest.writeInt(isMale ? 1 : 0);
}
public static final Parcelable .Creator<User> CREATOR = new Parcelable.Creator<User>(){
//创建反序列化对象
@Override
public User createFromParcel(Parcel source) {
return new User(source);
}
//创建反序列化对象数组
@Override
public User[] newArray(int size) {
return new User[size];
}
};
}
最后,比较一下两种序列化:① Serializable是Java中提供的一种序列化接口,使用简单但是开销很大,序列化过程和反序列化过程都需要大量 I/O 操作;② Parcelable是Android中的序列化方式,因此更适合使用在Android平台中,缺点就是使用起来麻烦一点,但是效率很高,这是Android推荐的序列化方式;③ Parcelable主要用在内存序列化上,通过Parcelable将对象序列化到存储设备中或者将对象序列化后通过网络传输也是可以的,但是这个过程会稍显复杂,因此在这两种情况下建议使用Serializable。
2. Parcelable接口:Android提供的一个序列化接口
下面演示一下Serializable接口的序列化以及反序列化操作:
序列化操作:
反序列化操作
现在,序列化以及反序列化比较清楚了吧!但是在这里有两点需要特别提一下:① 静态成员变量属于类不属于对象,因此序列化时并不会参与;② 使用transient关键字标记的成员变量也不参与序列化操作
下面讲讲Parcelable接口的序列化:
package com.xiaokai.entity;
import android.os.Parcel;
import android.os.Parcelable;
public class User implements Parcelable{
private int userId;
private String password;
private boolean isMale;
public User(int userId, String password, boolean isMale) {
this.userId = userId;
this.password = password;
this.isMale = isMale;
}
private User(Parcel in) {
userId = in.readInt();
password = in.readString();
isMale = in.readInt() == 1;
}
//内容描述,几乎所有情况都return 0,除非当前对象中存在文件描述符时,return 1
@Override
public int describeContents() {
return 0;
}
//序列化过程
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(userId);
dest.writeString(password);
dest.writeInt(isMale ? 1 : 0);
}
public static final Parcelable .Creator<User> CREATOR = new Parcelable.Creator<User>(){
//创建反序列化对象
@Override
public User createFromParcel(Parcel source) {
return new User(source);
}
//创建反序列化对象数组
@Override
public User[] newArray(int size) {
return new User[size];
}
};
}
最后,比较一下两种序列化:① Serializable是Java中提供的一种序列化接口,使用简单但是开销很大,序列化过程和反序列化过程都需要大量 I/O 操作;② Parcelable是Android中的序列化方式,因此更适合使用在Android平台中,缺点就是使用起来麻烦一点,但是效率很高,这是Android推荐的序列化方式;③ Parcelable主要用在内存序列化上,通过Parcelable将对象序列化到存储设备中或者将对象序列化后通过网络传输也是可以的,但是这个过程会稍显复杂,因此在这两种情况下建议使用Serializable。
相关文章推荐
- Android studio 性能优化
- Android apk 签名原理
- android studio 打包流程
- Android 开发者必备的书单
- Android笔记 - Binder之基本概念
- Android Service两种启动方式
- android开发中遇到的异常总结
- android第三方框架 xlistview 的使用
- android 4.0 Menu的一些问题(学习笔记)
- Android中view的简单应用---随手指移动的小球
- Allocation Tracker(Android Studio) 分析应用内存问题
- Android Studio插件和一些小技巧
- android读取系统相册返回为空的解决办法
- Android 各种调试方法
- Android 动画浅析
- android studio 指南针 项目
- Android制作粒子爆炸特效
- Android 了解Activity
- android任意view爆炸效果--第三方开源--ExplosionField
- 多线程在android上面的下载(3)更新界面