Android Parcelable和Serializable的区别
来源:互联网 发布:医疗器械软件风险管理 编辑:程序博客网 时间:2024/05/16 11:22
1.作用
Serializable的作用是为了保存对象的属性到本地文件、网络流、数据库以方便数据传输,当然这种传输可以是程序内的也可以是两个程序间的。而Android的Parcelable的设计初衷是因为Serializable效率过慢,为了在程序内不同组件间以及不同Android程序间(AIDL)高效的传输数据而设计,这些数据仅在内存中存在,Parcelable是通过IBinder通信的消息的载体。
从上面的设计上我们就可以看出优劣了。
2.效率
两种都是用于支持序列化、反序列化话操作,两者最大的区别在于存储媒介的不同,Serializable使用IO流读写存储在硬盘上,
Serializable可将数据持久化方便保存,所以在需要保存或网络传输数据时选择Serializable。而Parcelable是直接在内存中读写,很明显内存的读写速度通常大于IO读写,所以在Android中通常优先选择Parcelable。
3.编程实现
3.1 Serializable 接口
通过Serializable方式来实现对象的序列化,实现起来非常简单,我们只要实现Serializable接口即可,并提供一个序列化版本id(serialVersionUID:序列化前后的id要一致)即可,因为几乎所有的工作都被系统自动完成了。
3.2 Parcelable接口
Parcelable则需要实现writeToParcel、describeContents函数以及静态的CREATOR变量(用来反序列化),实际上就是将如何打包和解包的工作自己来定义,而序列化的这些操作完全由底层实现。下面一个Parcelable的实现例子:
public class User implements Parcelable {int userID;String userNAME;boolean isMale;public User(int userID, String userNAME, boolean isMale) {super();this.userID = userID;this.userNAME = userNAME;this.isMale = isMale;}public User(Parcel in) {userID = in.readInt();userNAME = in.readString();isMale = in.readInt() == 1;}public int describeContents() {return 0;}// 序列化功能public void writeToParcel(Parcel out, int flags) {out.writeInt(userID);out.writeString(userNAME);out.writeInt(isMale ? 1 : 0);}// 反序列化功能:内部标明了如何创建序列化对象和数组public static final Parcelable.Creator<User> CREATOR = new Parcelable.Creator<User>() {public User createFromParcel(Parcel in) {return new User(in);}public User[] newArray(int size) {return new User[size];}};}
1 0
- 【转】Android Parcelable和Serializable的区别
- Android Parcelable和Serializable的区别
- Android Parcelable和Serializable的区别
- Android Parcelable和Serializable的区别
- Android:Parcelable和Serializable的区别
- Android Parcelable和Serializable的区别
- Android Parcelable和Serializable的区别
- Android Parcelable和Serializable的区别
- Android中Parcelable和Serializable的区别
- Android Parcelable和Serializable的区别
- Android Parcelable和Serializable的区别
- Android Parcelable和Serializable的区别
- Android Parcelable和Serializable的区别
- Android Parcelable和Serializable的区别
- Android Parcelable和Serializable的区别
- Android Parcelable和Serializable的区别
- Android Parcelable和Serializable的区别
- Android Parcelable和Serializable的区别
- 不难不易的js加密
- strstr、strspn如何使用
- qt 手动设置控件的位置
- MySQL系列第二篇:MySQL可视化工具Navicat for MySQL安装配置和使用
- 大型核心系统的升级或迁移
- Android Parcelable和Serializable的区别
- 使用微服务架构改造遗留系统
- python requests的安装与简单运用
- Python的函数参数传递:传值?引用?
- MySQL数据库的数据类型和索引
- 332. Reconstruct Itinerary 难度:medium 类别:图
- centos 下面搭建ftp服务器
- anguar 实战(1)--MVC
- 理论经典:TCP协议的3次握手与4次挥手过程详解