63、序列化与反序列化
对象序列化(Serialize) 指将一个Java对象写入IO流中,与此对应的是,
对象的反序列化(Deserialize) 则指从IO流中恢复该Java对象。
如果想让某个Java对象能够序列化,则必须让它的类实现java.io.Serializable 接口。
1、
/**
* ObjectInputStream类继承了InputStream类,
* 同时实现了ObjectInput接口,提供了将对象序列化并从流中读取出来的功能。
*
*输入流对象(高级流)
* 作用:将Java对象还原出来
* 要求:还原对象的序列化版本号必须要求相同
*/
public static void main(String[] args) throws Exception{
创建对象输入流对象
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("dir/oos.abc"));
//将对象反序列化出来
Student stu = (Student) ois.readObject();
// 输出stu
System.out.println(stu.toString());
// 关闭流
ois.close();
2、
/**
* ObjectInputStream类继承了InputStream类,
* 同时实现了ObjectInput接口,提供了将对象序列化并从流中读取出来的功能。
*
*输入流对象(高级流)
* 作用:将Java对象还原出来
* 要求:还原对象的序列化版本号必须要求相同
*/
public static void main(String[] args) throws Exception{
创建对象输入流对象
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("dir/oos.abc"));
/**
* ObjectOutputStream 类继承了OutputStream 类,同时实现了ObjectOutput接口,
* 提供将对象序列化并写入流中的功能
*
* 对象流(高级流),作用:用于将Java对象写入文件(要求:被写入的对象必须实现序列化接口)
*/
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
public class ObjectOutputStreamDemo01 {
public static void main(String[] args) throws IOException {
//创建Java对象
Student stu = new Student();
stu.setId(1);
stu.setName("叼毛昌豪");
stu.setPwd("666dm");
//创建对象流
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("dir/oos.abc"));
//将对象写入文件
oos.writeObject(stu);
// 关闭流
oos.close();
}
//将对象反序列化出来
Student stu = (Student) ois.readObject();
// 输出stu
System.out.println(stu.toString());