问题描述
我们在实体类中实现了Serializable这个接口,那么这个接口到底有什么用?另外还定义了个serialVersionUID变量,这个变量又有什么作用呢?
什么是Serializable接口
一个对象序列化的接口,一个类只有实现了Serializable接口,它的对象才能被序列化。
什么是序列化?
序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。
https://baike.baidu.com/item/%E5%BA%8F%E5%88%97%E5%8C%96/2890184?fr=aladdin
序列化的目的
1、以某种存储形式使自定义对象持久化;
2、将对象从一个地方传递到另一个地方。
3、使程序更具维护性。
Java编程中的序列化
序列化的实现方法
把一个Java对象写入到硬盘或者传输到网路上面的其它计算机,这时我们就需要自己去通过java把相应的对象写成转换成字节流。对于这种通用的操作,我们为什么不使用统一的格式呢?没错,这里就出现了java的序列化的概念。在Java的OutputStream类下面的子类ObjectOutputStream类就有对应的WriteObject(Object object) 其中要求对应的object实现了java的序列化的接口。
在使用tomcat开发JavaEE相关项目的时候,我们关闭tomcat后,相应的session中的对象就存储在了硬盘上,如果我们想要在tomcat重启的时能够从tomcat上面读取对应session中的内容,那么保存在session中的内容就必须实现相关的序列化操作,还有jdbc加载驱动用的就是反序列化,将字符串变为对象。
序列化操作
把对象转换为字节序列(二进制数据)的过程称为对象的序列化
public class Book implements Serializable{
//序列化类:java.ioObjectOutputStream将对象变为指定的二进制数据
private static final long serialVersionUID = 1L;
private String title;
private double price;
public Book(String tit,double pri){
this.title=tit;
this.price=pri;
}
public String toString() {
Map<String, String> hashMap = new HashMap<String, String>();
hashMap.put("Computer base", "6.2");
hashMap.put("Computer webpage", "45.2");
hashMap.put("Java", "105.2");
hashMap.put("Andriod", "89.2");
//第一种:使用keySet()方法遍历哈希表hashMap中的一些元素
System.out.println("通过keySet()方法遍历key和value&