Android 进阶学习笔记-----序列化和反序列化的理解
来源:互联网 发布:起点源码 编辑:程序博客网 时间:2024/06/04 20:27
一、什么是序列化?
答:
通俗的说就是让一个对象变成可存储可传输的过程就叫序列化。
二、什么时候用到序列化?
答:
1.当对象需要网络传输时需要将对象进行序列话才能进行传输
2.当对象需要进行存储时
三、如何将对象序列化
答:
实现序列化有两个接口 Serializable (序列化后可以保存到本地)和 Parcelable (序列化后不可以保存到本地)
首先介绍这两个接口的用法
Serializable : 首先让一个实体类继承这个接口,还有声明一个serialVersionUID 这个ID可声明也可以不声明,但是会对反序列化有影响。如果反序列实体类的serialVersionUID和序列化的的serialVersionUID不一样那么将会报错。
public class Music implements Serializable { private static final long serialVersionUID = 23l; //值可自定义 public String singer; public String songName; public Music() { } public String getSinger() { return singer; } public void setSinger(String singer) { this.singer = singer; } public String getSongName() { return songName; } public void setSongName(String songName) { this.songName = songName; } @Override public String toString() { return "Music{" + "singer='" + singer + '\'' + ", songName='" + songName + '\'' + '}'; }}
Music music = new Music();music.setSongName("光辉岁月");music.setSinger("beyong");ObjectOutputStream objectOutputStream = new ObjectOutputStream( new FileOutputStream("/storage/emulated/0/Cache.txt"));objectOutputStream.writeObject(music);objectOutputStream.close();
Parcelable:用法比较复杂,不过写法很简单。只需要写好你的实体类然后实现这个接口再根据快捷键就可以了。
首先创建实体类实现接口
public class Human implements Parcelable{
然后重写接口里面的方法
public class Human implements Parcelable{ public String Name; public String weight; protected Human() { } protected Human(Parcel in) { Name = in.readString(); weight = in.readString(); } public static final Creator<Human> CREATOR = new Creator<Human>() { @Override public Human createFromParcel(Parcel in) { return new Human(in); } @Override public Human[] newArray(int size) { return new Human[size]; } }; @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(Name); dest.writeString(weight); } public String getName() { return Name; } public void setName(String name) { Name = name; } public String getWeight() { return weight; } public void setWeight(String weight) { this.weight = weight; }
实体类写好了我们就开始传值了
Human human = new Human();human.setName("necor");human.setWeight("120kg");Intent intent = new Intent(MainActivity.this, FirstActivity.class);Bundle bundle = new Bundle();bundle.putParcelable("na", human);intent.putExtras(bundle);startActivity(intent);
四、反序列化
Serializable:
ObjectInputStream objectInputStream = new ObjectInputStream( new FileInputStream("/storage/emulated/0/Cache.txt"));Music music = (Music) objectInputStream.readObject();objectInputStream.close();Flog.d(TAG, "SerializeActivity DisSerialize music.toString : " + music.toString());
Parcelable:
Human human =(Human) getIntent().getParcelableExtra("na");
当你出现错误时那就会有可能是没有给权限,接下来你以为我会给你权限的图吗?---不给
阅读全文
0 0
- Android 进阶学习笔记-----序列化和反序列化的理解
- 序列化和反序列化理解
- 序列化和反序列化的简单理解
- 对序列化和反序列化的理解
- 序列化和反序列化的简单理解
- 序列化和反序列化的简单理解
- 序列化和反序列化的简单理解
- 序列化和反序列化的简单理解
- 序列化和反序列化的简单理解
- 序列化和反序列化漏洞的简单理解
- 序列化和反序列化的简单理解
- Java序列化和反序列化的简单理解
- 序列化和反序列化的简单理解
- 序列化和反序列化的简单理解
- 序列化和反序列化的简单理解
- java序列化和反序列化的理解
- 序列化和反序列化的简单理解
- 对于序列化和反序列化的理解
- stm32-文章收藏
- 七.scrapy settings中文版
- bzoj 2122: 工作评估
- 云笔记项目 Unit09
- MyEclipse 使用gradle 构建java web项目
- Android 进阶学习笔记-----序列化和反序列化的理解
- SQL 已更新或删除的行值要么不能使该行成为唯一行(sqlserver中有多行所有的列重复的数据,无法更新或删除问题)
- JSP九大内置对象和四种属性范围解读
- nacicat 连接服务器mysql数据库
- 引用变量一
- CSS 定位posistion,absolute,relative,float,clear最简单明了的解释
- laravel 5.* 打印输出最后执行一条sql
- 有向图中以一个顶点为起始点的所有路径
- 悬镜安全实验室Kr0iNg获网易SRC 7月份贡献榜第一,企业安全服务交给我们更放心