Android对象序列化:Serializable和Parcelable
来源:互联网 发布:只有我知 孔垂楠 编辑:程序博客网 时间:2024/03/29 15:05
Android通过Intent传递对象,或者将对象持久化到文件和进行网络传输时,对象需要实现序列化接口Serializable或者Parcelable。下面分别介绍下两种序列化方式的实现及使用区别:
一、Serializable
Serializable实Java提供的序列化接口,使用时实体类实现Serializable接口,并且在类中声明serialVersionUID值即可。
public class Student implements Serializable { private static final long serialVersionUID = 1L; private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }}
序列化和反序列化到文件也相当简单:
Student student = new Student();student.setName("小明");student.setAge(20);// 序列化ObjectOutputStream out = new ObjectOutputStream( new FileOutputStream("student.txt"));out.writeObject(student);out.close();// 反序列化ObjectInputStream in = new ObjectInputStream( new FileInputStream("student.txt"));Student student1 = (Student) in.readObject();in.close();
注:serialVersionUID是序列化和反序列化时使用的标识,如不指定,会自动生成hash值。序列化和反序列化时值相同才可以正常进行反序列化,如果不指定,当类增加或者删除了某些成员变量时,hash会发生变化,反序列化时程序会crash。
二、Parcelable
Parcelable也是一个接口,实现这个接口,对象就能序列化:
public class Teacher implements Parcelable { private String name; private int age; public Teacher(String name, int age) { this.name = name; this.age = age; } public static final Creator<Teacher> CREATOR = new Creator<Teacher>() { @Override public Teacher createFromParcel(Parcel in) { return new Teacher(in); } @Override public Teacher[] newArray(int size) { return new Teacher[size]; } }; @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel out, int flags) { out.writeString(name); out.writeInt(age); } protected Teacher(Parcel in) { name = in.readString(); age = in.readInt(); }}
Parcelable 方法说明:
- createFromParcel(Parcel in) 从序列化后的对象中创建原始对象
- newArray(int size) 创建指定长度的原始对象数组
- Teacher(Parcel in) 从序列化后的对象中创建原始对象
- writeToParcel(Parcel out, int flags) 将当前对象写入序列化结构中
flags标识有两种值:0和1
1 - 当前对象需要作为返回值返回,不能立即释放资源 - describeContents() 返回当前对象的内容描述,如果含有文件描述,返回1,否则返回0
三、两者区别
- Serializable 是Java中的序列化接口,使用简单但是开销大,序列化和反序列化需要大量的I/O操作;
- Parcelable 是Android中的序列化方式,更适合在Android平台使用,缺点是使用麻烦,但是效率很高;
- 将对象序列化到内存中,推荐Parcelable;
- 将对象序列化后存储到设备或者通过网络传输,推荐Serializable。
阅读全文
0 0
- Android对象序列化:Serializable和Parcelable
- Android中Serializable和Parcelable序列化对象
- Android中Serializable和Parcelable序列化对象详解
- Android中Serializable和Parcelable序列化对象详解
- Android中Serializable和Parcelable序列化对象详解
- Android中Serializable和Parcelable序列化对象详解
- Android中Serializable和Parcelable序列化对象详解
- Android中Serializable和Parcelable序列化对象详解
- Android中Serializable和Parcelable序列化对象详解
- Android中Serializable和Parcelable序列化对象详解
- android 对象序列化Parcelable,Serializable详解
- 对象序列化传递 Serializable 和Parcelable
- android序列化 Parcelable和Serializable接口
- Android序列化:Serializable和Parcelable详解
- Android 序列化 Parcelable和Serializable 浅谈
- Android序列化Serializable和Parcelable区别
- Android序列化parcelable和 serializable分析
- Android序列化:Serializable和Parcelable
- 李航统计学习方法:第一章
- java二叉树的遍历
- C++实训 单元十一 MFC GDI+编程基础
- PHP时间戳和日期相互转换
- Hystrix请求合并
- Android对象序列化:Serializable和Parcelable
- (1)网络编程的基本概念和简单的socket通信
- 解决selenium webdriver运行出现的org.openqa.selenium.firefox.NotConnectedException问题
- URG与PSH的区别及联系
- ReactNative 开发工具Atom+ Nuclide
- import module_Android 简单的导入模组_流程
- GitHub学习有感
- oracle数据库的泵导入导出
- 关于阿里云服务器Linux安装Tomcat后,外网不能访问解决方案