java 提供了一种对象序列化的机制,该机制中,一个对象可以被表示为一个字节序列,该字节序列包括该对象的数据、有关对象的类型的信息和存储在对象中数据的类型。
将序列化对象写入文件之后,可以从文件中读取出来,并且对它进行反序列化,也就是说,对象的类型信息、对象的数据,还有对象中的数据类型可以用来在内存中新建对象。
整个过程都是Java虚拟机(JVM)独立的,也就是说,在一个平台上序列化的对象可以在另一个完全不同的平台上反序列化该对象。
类ObjectInputStream
writeObject(Object x)
类ObjectOutputStream
readObject()
是高层次的数据流,它们包含序列化和反序列化对象的方法。
一、序列化对象
1.1创建实体类
序列化要实体类去实现 implements Serializable,否则会报java.io.NotSerializableException异常
出现这个问题的时候应该是想要将 该实体类对象保存到某个地方,那么此时必须需要序列化;一个类只有实现了Serializable接口,它的对象才是可序列化的;
而访问这个类的源代码你会发现他什么也没有实现,其实就相当于一个标志位,它的作用只是能指明哪个类可以被实例化
package com.amarsoft.lease;
import java.io.Serializable;
public class Student implements Serializable {
private String name ;
private int age ;
private String sex;
Student(String name,int age,String sex){
this.name = name;
this.age = age;
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
//序列化
String path = "D:\\workspace\\HtProject\\ea\\casic-mis-ea\\amix-lease\\src\\test\\java\\com\\amarsoft\\lease\\Student1.ser";
Student student = new Student("会飞的蜗牛", 300, "雄性");
try{
FileOutputStream fileOutputStream = new FileOutputStream(path);
ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
objectOutputStream.writeObject(student);
objectOutputStream.close();
fileOutputStream.close();
}catch (Exception e){
System.out.println(e.getMessage());
}
二、反序列化对象
package com.amarsoft.lease;
import java.io.FileInputStream;
import java.io.ObjectInputStream;
public class Cainfyly {
public static void main(String[] args) {
//反序列化
String path = "D:\\workspace\\HtProject\\ea\\casic-mis-ea\\amix-lease\\src\\test\\java\\com\\amarsoft\\lease\\Student1.ser";
try{
FileInputStream fileInputStream = new FileInputStream(path);
ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
Student stu = (Student)objectInputStream.readObject();
stu.setAge(200);
System.out.println(stu.getAge());//200
objectInputStream.close();
fileInputStream.close();
}catch (Exception e){
System.out.println(e.getMessage());
}
}
}