android之序列化
来源:互联网 发布:我知天下之中央 编辑:程序博客网 时间:2024/05/02 04:46
Java是面向对象的,对像实现序列化,可以更方便的存储、传输数据。在这里序列化的方式我们主要介绍Serializable,Parcelable。
一、Serializable
Serializable是Java所提供的一个序列化接口,使用Serializable实现序列化比较简单,继承Serializable并在类的声明中添加类似下面的标识:
private static final long serialVersionUID = 123456789L;
其实不指定serialVersionUID也可以实现序列化,但是如果不指定的话,系统会取用类的hash值。被序列化后的数据中的serialVersionUID只有和当前类的serialVersionUID相同才能正常的被反序列化。如果指定了这个值后,类改变后,仍然可以最大限度的恢复数据。代码:
public class PersonSerial implements Serializable{ private static final long serialVersionUID = 123456789L; private String name; private int age; private String sex; private String address; public PersonSerial(String name, int age, String sex, String address) { this.name = name; this.age = age; this.sex = sex; this.address = address; } }
二、Parcelable
Parcelable是android中的序列化方式,只要实现Parcelable这个接口,就可以序列化。
代码:
public class PersonParcelable implements Parcelable { private String name; private int age; private Address address; private List<Fancy> fancy; public PersonParcelable(String name, int age, Address address, List<Fancy> fancy) { this.name = name; this.age = age; this.address = address; this.fancy = fancy; } //按照存入的顺序读取 protected PersonParcelable(Parcel in) { name = in.readString(); age = in.readInt(); //由于address是另一个可序列化对象,他的反序列化过程需要传递当前线程的上下文类加载器。 address = in.readParcelable(Thread.currentThread().getContextClassLoader()); Parcelable[] pars = in.readParcelableArray(Thread.currentThread().getContextClassLoader()); fancy = Arrays.asList(Arrays.asList(pars).toArray(new Fancy[pars.length])); } //反序列化 public static final Creator<PersonParcelable> CREATOR = new Creator<PersonParcelable>() { @Override public PersonParcelable createFromParcel(Parcel in) { return new PersonParcelable(in); } @Override public PersonParcelable[] newArray(int size) { return new PersonParcelable[size]; } }; //如果含有文件描述符返回1,否则返回0。基本填写0即可。 @Override public int describeContents() { return 0; } //序列化,flags为1标识当前对象作为返回值返回,不能立刻释放资源;基本填写0即可。 @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(name); dest.writeInt(age); dest.writeParcelable(address, flags); dest.writeParcelableArray(fancy.toArray(new Fancy[(fancy.size())]), flags); }}Array(new Fancy[(fancy.size())]), flags); }}}
三、总结
Seralizable是Java中的序列化接口,实现简单,适合本地数据的持久化,但是其开销很大,序列化和反序列化需要消耗大量资源。而Parcelable是Android中的序列化接口,其效率很高,在Android源码中大量使用,但是其实现稍微复杂,而且反序列化的顺序一定要和序列化的顺序一致,在外界变化下,不能很好保证数据的持续性。注意静态成员变量和transient标记的成员变量不参与序列化。
1 0
- android之序列化
- Android之序列化
- Android之序列化
- Android序列化之Parcelable
- Android序列化之Parcel
- Android深究之序列化
- Android IPC之序列化
- Android之序列化浅析
- Android开发之序列化接口
- Android之XML序列化和解析
- Android开发篇之对象序列化
- Android笔记之对象序列化
- android序列化之Serializable,Parcelable
- Android学习之xml序列化
- Android 序列化之 Parcelable 接口
- Android 序列化之Serializable和Parcelable
- Android之Intent 序列化反序列化
- android之XmlSerializer序列化XML(写入)
- 类模板的定义和使用 http://blog.csdn.net/djinglan/article/details/6689839
- ionic 模型 $ionicModal
- 欢迎使用CSDN-markdown编辑器
- C语言之二分查找
- jenkins+git+android+gradle持续集成问题总结
- android之序列化
- cuda error问题的解答
- 1053. Path of Equal Weight (30)
- 慕课网【HTML+CSS】3.13前学习内容汇总
- java学习之(一) 基本数据及语法
- ZOJ-3490-String Successor【8th浙江省赛】【模拟】
- netty在游戏服务器开发中的应用(一)
- Python开发接水果小游戏
- 使用python实现打印所有100以内的所有质数