Android序列化 Serializable与Parcelable
来源:互联网 发布:努比亚专业相机软件 编辑:程序博客网 时间:2024/05/21 17:35
1 为什么要序列化
为了保存java对象的状态
Java平台允许我们在内存中创建可复用的Java对象,但一般情况下,只有当JVM处于运行时,这些对象才可能存在,即,这些对象的生命周期不会比JVM的生命周期更长。但在现实应用中,就可能要求在JVM停止运行之后能够保存(持久化)指定的对象,并在将来重新读取被保存的对象。Java对象序列化就能够帮助我们实现该功能。
使用Java对象序列化,在保存对象时,会把其状态保存为一组字节,在未来,再将这些字节组装成对象。必须注意地是,对象序列化保存的是对象的”状态”,即它的成员变量。由此可知,对象序列化不会关注类中的静态变量。
除了在持久化对象时会用到对象序列化之外,当使用RMI(远程方法调用),或在网络中传递对象时,都会用到对象序列化。
2 怎么序列化
实现了Serializable接口
3 序列化使用
transient关键字
当某个字段被声明为transient后,默认序列化机制就会忽略该字段。
writeObject()方法与readObject()方法
被声明为transitive的字段age,除了将transitive关键字去掉之外,是否还有其它方法能使它再次可被序列化?方法之一就是在Person类中添加两个方法:writeObject()与readObject()
private void writeObject(ObjectOutputStream out) throws IOException { out.defaultWriteObject(); out.writeInt(age); } private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { in.defaultReadObject(); age = in.readInt(); }
Externalizable接口
单例序列化
readResolve()
private Object readResolve() throws ObjectStreamException {
return InstanceHolder.instatnce;
}
无论是实现Serializable接口,或是Externalizable接口,当从I/O流中读取对象时,readResolve()方法都会被调用到。实际上就是用readResolve()中返回的对象直接替换在反序列化过程中创建的对象。
3 android序列化
序列化,表示将一个对象转换成可存储或可传输的状态。序列化后的对象可以在网络上进行传输,也可以存储到本地。
Serializable与Parcelable对比
android上应该尽量采用Parcelable,效率至上
编码上:
Serializable代码量少,写起来方便
Parcelable代码多一些
效率上:
Parcelable的速度比高十倍以上
serializable的迷人之处在于你只需要对某个类以及它的属性实现Serializable 接口即可。Serializable 接口是一种标识接口(marker interface),这意味着无需实现方法,Java便会对这个对象进行高效的序列化操作。
这种方法的缺点是使用了反射,序列化的过程较慢。这种机制会在序列化的时候创建许多的临时对象,容易触发垃圾回收。
Parcelable方式的实现原理是将一个完整的对象进行分解,而分解后的每一部分都是Intent所支持的数据类型,这样也就实现传递对象的功能了
http://www.jianshu.com/p/a60b609ec7e7
- Android序列化 Serializable与Parcelable
- android (序列化) serializable 与 Parcelable
- 序列化--Serializable与Parcelable
- Android-序列化,Parcelable,Serializable
- Android Serializable Parcelable 序列化
- Android 序列化Serializable、Parcelable
- Android序列化:Serializable & Parcelable
- Android序列化Parcelable、Serializable
- Android序列化:Parcelable/Serializable
- Android -序列化 : Serializable / Parcelable
- Android序列化:Serializable Parcelable
- Android -- 序列化Parcelable与Serializable区别及用法
- Android序列化——Serializable与Parcelable
- Android-Intent传递对象序列化之Serializable与Parcelable
- Android中数据序列化之Serializable与Parcelable
- Android中数据序列化之Serializable与Parcelable
- Android中数据序列化之Serializable与Parcelable
- Android基础——序列化之Parcelable与Serializable
- okhttp3使用详解
- GPS坐标与高德坐标相互转换
- python编码问题
- 如何从头搭建一个搜索引擎_HTML简介和BeautifulSoup的基础使用
- 微服务架构的基础框架选择:Spring Cloud还是Dubbo?
- Android序列化 Serializable与Parcelable
- ORA-29275:部分多字节字符
- 数据库优化总结
- odoo10.0 网站建立
- LINUX学习笔记二(常用指令)
- 关于c语言中fread和fwrite的使用
- muduo网络库源码解析 三
- 厨房单品
- yii2 中获取 模块、控制器、方法名的方法