序列化:就是将对象的状态信息转换为能够存储或传输的形式的过程javascript
在咱们平时开发中.咱们用到序列化最多的地方就是经过intent传递对象,若是你要在intent中传递基本数据类型之外的对象,那么该对象必须实现Serializable或者Parcelable,不然会报错java
注意:android
Serializable是java提供的序列化接口,使用起来特别简单,你只用实现这个接口就可以让这个对象支持序列化面试
public class Person implements Serializable{
}复制代码
可是有一点要注意,就是你能够添加一个字段,serialVersionUID缓存
private static final long serialVersionUID = 2387925265962719695L;复制代码
若是你不添加serialVersionUID,也不会影响使用,可是存在即合理,既然存在这个字段,那么他必定是有用的,当你序列化的时候这个UID会被写入文件,当反序列话的时候会去读取这个ID,并与反序列化的类中的UID对比,若是相同,那么反序列化就成功,若是不一样,反序列化就会失败网络
当你不指定UID的时候,系统会根据类的结构生成相应的hash值赋值给UID,可是当你的类的结构发生变化,好比增长一个字段或者减小一个字段的时候,UID就会发生变化,那么反序列话的时候两个类的UID就不同了,就会反序列化失败ide
因此手动指定UID,主要就是在类结构发生变化时,减小反序列化失败的概率(若是类发生了很是规的结构变化,好比类名变化,成员变量的类型变化,就算是指定了UID,反序列化也会失败)工具
Serializable序列化与反序列化有不少种方法,这里示范一下经过写入文件和读取文件来实现.优化
序列化: spa
File file = new File(getFilesDir()+"xiayu.txt");
Person person = new Person("xiayu");
ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream(file));
outputStream.writeObject(person);复制代码
反序列化:
ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(getFilesDir()+"xiayu.txt"));
Person person = (Person) objectInputStream.readObject();复制代码
Parcelable是Android特有的序列化方式,他的实现相对Serialiable来讲更加复杂一点,可是经过AS的一个插件就能够很方便的完成
当你完成对象的建立并实现Parcelable接口后,右键,选择Generate,接着选择Parcelable,并点击你须要序列化的字段,点击ok就完成可序列化了
这里面的方法就不作详细解析了,有兴趣的朋友能够去了解一下
Serializable:
Parcelable: