目录
前言
一、 什么是序列化
二、java如何进行序列化
1.
2.读入数据
前言
就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。
提示:以下是本篇文章正文内容,下面案例可供参考
一、 什么是序列化
就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。
我们将对象写入到本地文件的时候 报错: java.io.NotSerializableException:com.aaa.day06.test.People
没有序列化异常
序列化: 将 java对象信息 转换成 二进制数据流的过程
反序列化: 将 二进制数据流 转换成 java对象信息的过程
IO操作的时候 操作的就是数据流,也就是说:进行读写的内容 必须以流的形式进行读写。此时我们的People对象 不能进行序列化 就说明不能转换成数据流 ,就不能进行IO读写。
二、java如何进行序列化
1.
序列化操作是一个非常复杂的算法操作,所以 java 官方给我们写好了。
但是使用的方式很特殊, java底层写好了序列化操作,但是官方并不确定 你的对象 是否需要 序列化操作。
此时官方玩了一手 接口标记 操作:
如果你的对象 需要底层的序列化操作 你的对象 就实现一个接口
public class People implements Serializable {}
如果你的对象 不需要底层的序列化操作 就不需要实现这个接口
此处就体现了接口的一个应用场景: 添加标记
我们查看源代码发现:
public interface Serializable {}
序列化接口里面啥都没有,因为其存在的意义就是为了 添加标记
2.读入数据
代码如下(示例):
java.io.InvalidClassException: com.aaa.day06.test.People; local class incompatible: stream classdesc serialVersionUID = -6756687719523839819, local class serialVersionUID = 873305606511316975
存的时候版本 和取的时候不一样 就会报错。
所以 我们一开始就要给其设定版本
public class People implements Serializable {
private static final long serialVersionUID = 666L;
String name;
int level;
double money;
public People(String name, int level, double money) {
this.name = name;
this.level = level;
this.money = money;
}
}