本文为学习笔记,所用的图片、案例均为教学视频截图
源视频地址:Android开发基础教程(2019)第35集 序列化(1)
作者:longway777
何为序列化
将对象转换为字节序列,完整的保存在磁盘上,或者通过网络发送出去。
反序列化就是将对象重新创建出来
序列化的三种方式
Serializable
java自带的接口,使用起来很简单,只需要一句话的标注就可以,具体实现也不需要做,全部是由jdk完成。缺点是效率不高,但对于应用程序级别已经够用。
Parcelable
专为安卓定制,深度优化,效率很高,在安卓系统的底层扮演了非常重要的角色,进程调度交换数据,交换对象等必不可少。
Json
基于文本的序列化,相对于二进制文件文本具有很高的可读性,广泛应用。
效果演示
本篇章先使用第一个方法,Serializable 实现对象的序列化以及反序列化。
通过输入内容,点击Save按钮后将对象保存在文件中(序列化),点击load读取文件中的内容,反序列化使对象重建并显示在屏幕上。
一、创建界面
二、创建student类
创建student类,包含属性名字、姓名、分数等,类要实现接口:Serializable。并且设置getter、setter,实现构造方法等。(具体看最后的源码)
alt+insert,选择构造,创建他们三个的构造方法。
完成他们的setter和gerter
三、点击按钮创建对象写入到文件中
try catch
没有处理可能发生的异常
这种IO的操作,包括像是网络的操作,是不可靠的,不一定成功,可能会出错(比如文件不存在,磁盘故障),所以需要做异常处理避免应用程序产生异常而崩溃。
尝试执行
尝试执行try里面的内容,如果不成功就会返回一个异常值,这里把他打印出来。
举一个很简单的例子
并且程序没有闪退
SAVE完成后,点击执行:
在文件系统中可以找到创建的文件
是二进制序列的字节文件,看着像是乱码
可以用hex转换工具大致看看
toast的快速自动补全
输入Toast按下tab键自动补全
四、点击按钮反序列化重建对象
可能的错误,两个catch
快速try
点击按钮后反序列化并且对象重建在屏幕上
关键代码
虽然代码看似很多,但序列化真正涉及到的就是序列化后写入文件中,然后反序列化读出来,还有类要继承的接口。
student.java
创建student类,包含属性名字、姓名、分数等,类要实现接口:Serializable。并且设置getter、setter,实现构造方法等。
//如果某个属性不需要序列化,可以添加关键字:transient
public class Student implements Serializable {
private String name;
private int age;
private Score score;
public Student(String name, int age, Score score) {
this.name = name;
this.age = age;
this.score = score;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}