ObjectInputStream:反序列化流
Object readObject() 从 ObjectInputStream 读取对象。
注意:如果一个类不实现Serializable接口无法把实例化,会报异常java.io.NotSerializableException
类通过实现 java.io.Serializable 接口以启用其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化。
如何实现序列化
让对象所属类的实现序列化接口。
package com.edu_07;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;
public class ObjectInputStreamDemo {
public static void main(String[] args) throws Exception {
//创建反序列化流对象
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("oos.txt"));
//读取文件中存储的对象,以实现反序列化
//readObject()
Object object = ois.readObject();
System.out.println(object);
//关流
ois.close();
}
}
package com.edu_07;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
对象的序列化和反序列化
序列化流:把对象按照流一样的方式写到文件或者在网络中传输。
反序列化流:把文件或者网络中的流对象数据还原对象。
ObjectOutputStream:序列化流
writeObject(Object obj) 将指定的对象写入 ObjectOutputStream。
public class ObjectOutputStreamDemo {
public static void main(String[] args) throws IOException {
//创建序列化流对象
//public ObjectOutputStream(OutputStream out)
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("oos.txt"));
//创建一个学生对象,将学生对象写入文件中
Studnet s = new Studnet("刘德华", 50);
oos.writeObject(s);
// java.io.NotSerializableException
//类通过实现 java.io.Serializable 接口以启用其序列化功能
//关流
oos.close();
}
}
package com.edu_07;
import java.io.Serializable;
public class Studnet implements Serializable{
//实现这个接口不需要实现任何方法,这个接口说白了就是仅仅给Student类,打上了一个可以被序列化的标示
private String name;
private int age;
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 Studnet(String name, int age) {
super();
this.name = name;
this.age = age;
}
public Studnet() {
super();
// TODO Auto-generated constructor stub
}
@Override
public String toString() {
return "Studnet [name=" + name + ", age=" + age + "]";
}
}