序列化运行时使用一个称为 serialVersionUID 的版本号与每个可序列化类相关联,该序列号在反序列化过程中用于验证序列化对象的发送者和接收者是否为该对象加载了与序列化兼容的类。如果接收者加载的该对象的类的 serialVersionUID 与对应的发送者的类的版本号不同,则反序列化将会导致 InvalidClassException
序列化:把对象转化为字节序列的过程称为对象的序列化
反序列化:把字节序列恢复为对象的过程称为对象的反序列化
JAVA提供了API实现了对象的序列化和反序列化的功能,使用这些API时需要遵守如下约定:
被序列化的对象类型需要实现序列化接口,此接口是标志接口,没有声明任何的抽象方法,JAVA编译器识别这个接口,自动的为这个类添加序列化和反序列化方法。
为了保持序列化过程的稳定,建议在类中添加序列化版本号。
不想让字段放在硬盘上就加transient
以下情况需要使用 Java 序列化:
想把内存中的对象状态保存到一个文件中或者数据库中时候;
想用套接字在网络上传送对象的时候;
想通过RMI(远程方法调用)传输对象的时候。
序列化:把对象转化为字节序列的过程称为对象的序列化
反序列化:把字节序列恢复为对象的过程称为对象的反序列化
实现方式:实现Serializable接口
package 序列化;
import java.io.Serializable;
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
static String XINGQIU = "地球";
int age;
String name;
// String sex;
transient String car;
public static String getXINGQIU() {
return XINGQIU;
}
public static void setXINGQIU(String XINGQIU) {
Person.XINGQIU = XINGQIU;
}
public String getCar() {
return car;
}
public void setCar(String car) {
this.car = car;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// public String getSex() {
// return sex;
// }
//
// public void setSex(String sex) {
// this.sex = sex;
// }
@Override
public String toString() {
return "Person{" +
"age=" + age +
", name='" + name + '\'' +
", car='" + car + '\'' +
'}';
}
}
package 序列化;
import java.io.*;
public class SeriableTest {
public static void main(String[] args) throws IOException, ClassNotFoundException {
// serializePerson();
Person person = deserilizePerson();
System.out.println(person);
}
/**
* 序列化
* @throws IOException
*/
public static void serializePerson() throws IOException {
Person person = new Person();
person.setCar("奥迪");
person.setAge(22); person.setName("coderzpw");
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("d:/test/person.txt")));
oos.writeObject(person);
System.out.println("person对象序列化成功!");
oos.close();
}
/**
* 反序列化
* @return
* @throws IOException
* @throws ClassNotFoundException
*/
public static Person deserilizePerson() throws IOException, ClassNotFoundException {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("d:/test/person.txt"));
Person preson = (Person)ois.readObject();
System.out.println("person反序列化成功!");
ois.close();
return preson;
}
}
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/qq_45464560/article/details/122547258
内容来源于网络,如有侵权,请联系作者删除!