Android -序列化 : Serializable / Parcelable
来源:互联网 发布:手机淘宝点购买没反应 编辑:程序博客网 时间:2024/05/16 11:34
一、简介
● 序列化
由于存在于内存中的对象都是暂时的,无法长期驻存,为了把对象的状态保持下来,这时需要把对象写入到磁盘或者其他介质中,这个过程就叫做序列化。
● 反序列化
反序列化恰恰是序列化的反向操作,也就是说,把已存在在磁盘或者其他介质中的对象,反序列化(读取)到内存中,以便后续操作,而这个过程就叫做反序列化。
概括性来说
序列化是指将对象实例的状态存储到存储媒体(磁盘或者其他介质)的过程。在此过程中,先将对象的公共字段和私有字段以及类的名称(包括类所在的程序集)转换为字节流,然后再把字节流写入数据流。在随后对对象进行反序列化时,将创建出与原对象完全相同的副本。
对象的序列化 : 把Java对象转换为字节序列并存储至一个储存媒介的过程。
对象的反序列化:把字节序列恢复为Java对象的过程。
1、作用
Serializable的作用是为了 保存对象 的属性到本地文件、数据库、网络流、rmi以方便数据传输,当然这种传输可以是程序内的也可以是两个程序间的。
而Android的Parcelable的设计初衷是因为Serializable效率过慢,为了在程序内不同组件间以及不同Android程序间(AIDL)高效的 传输数据 而设计,这些数据仅在内存中存在,Parcelable是通过IBinder通信的消息的载体。
2、效率及选择
Parcelable的性能比Serializable好,在内存开销方面较小,所以在内存间数据传输时推荐使用Parcelable,如activity间传输数据,
而Serializable可将数据持久化方便保存,所以在需要保存或网络传输数据时选择Serializable,因为android不同版本Parcelable可能不同,所以不推荐使用Parcelable进行数据持久化。
3、编程实现
对于Serializable,类只需要实现Serializable接口,并提供一个序列化版本id(serialVersionUID)即可。
而Parcelable则需要实现writeToParcel、describeContents函数以及静态的CREATOR变量,实际上就是将如何打包和解包的工作自己来定义,而序列化的这些操作完全由底层实现。
二、android studio 中使用 Parcelable
1、在线安装
打开File -> Settings -> Pugins -> Browse Repositories 如下,输入android parcelable code generator:
然后就可以安装了,安装好了之后重启下就可以用啦~~
2、离线安装,点击这里下载安装包
下载好了之后,打开File -> Settings -> Pugins -> Install plugin from disk,选择你刚刚下载到的.zip压缩包,然后OK,重启就行啦
3、使用方法:
新建好一个实体类后写好属性:
按下Alt+Insert,选择Palcelable,选择需要的属性,按下OK,搞定~~很简单有木有!
demo演示:
1、首先建好一个测试用的person实体类:
2、然后一键生成之后如下,看看是不是你想要的,是的话就继续往下看:
package com.kroclin.myapplication; import android.os.Parcel; import android.os.Parcelable; /** * Created by KrocLin on 2014/11/7. */ public class Person implements Parcelable { private int age; private String name; private String gender; @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(this.age); dest.writeString(this.name); dest.writeString(this.gender); } public Person() { } private Person(Parcel in) { this.age = in.readInt(); this.name = in.readString(); this.gender = in.readString(); } public static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>() { public Person createFromParcel(Parcel source) { return new Person(source); } public Person[] newArray(int size) { return new Person[size]; } }; }
参考:
Android Studio酷炫插件(一)——自动化快速实现Parcelable接口序列化
三、Android studio 中使用 Serializable
serialVersionUID的作用不用说,唯一指定一个对象,如果没有制指定,那么每次修改对象都会自动生成一个serialVersionUID,那么序列号和反序列化就可能出问题,系统根据serialVersionUID认为这是俩个对象。
在eclipse中很容易的就能自动提示添加serialVersionUID,而在AndroidStudio中却没有提示,原来是as的检查配置中默认是关掉对serialVersionUID的检查的,那么我们打开就可以。
开启serialVersionUID
1、File -> Settings… -> Editor -> Inspections -> Serialization issues[在java类目下] -> Serializable class without ‘serialVersionUID’(选中)
生成serialVersionUID
2、进入实现了Serializable中的类,选中类名,Alt+Enter弹出提示,然后直接导入完成
demo:
public class MyProcess implements Serializable { private static final long serialVersionUID = 7322176390951711093L; private int age; private String name; private String gender; public MyProcess() { } public MyProcess(int age, String name, String gender) { this.age = age; this.name = name; this.gender = gender; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } @Override public String toString() { return "MyProcess{" + "age=" + age + ", name='" + name + '\'' + ", gender='" + gender + '\'' + '}'; }}
参考:
Android Studio类中实现Serializable自动生成serialVersionUID
如何让Android Studio 自动生成 serialVersionUID
- 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 序列化 Parcelable 跟 Serializable
- android序列化Serializable、Parcelable(一)
- Android序列化:Serializable和Parcelable详解
- Android 序列化 Parcelable和Serializable 浅谈
- Android使用序列化接口Parcelable、Serializable
- Android使用序列化接口Parcelable、Serializable
- Android使用序列化接口Parcelable、Serializable
- Android序列化Serializable和Parcelable区别
- android序列化之Serializable,Parcelable
- 各种逆元求法 组合数取模 comb (组合数 Lucas)
- Android截图包含webview时,webview部分空白(其他部分正常),此问题发生在系统4.4及以上
- 循环的优化
- Deep Convolutional Neural Network for Image Deconvolution
- 沈阳集训day2
- Android -序列化 : Serializable / Parcelable
- USACO-SECTION1.2 Dual Palindromes
- 【2017】五月份英语学习总结
- 遍历一个布局里面所有的控件
- 王家林老师大数据视频学习地址
- 列对象+创建对象类型+使用对象类型定义表中的列/DML操作
- Android—java实现apk的静默安装、普通安装
- Spring Spring-data-redis 实现的消息队列
- Javaee -----01----javaee的环境搭建和html标签