package io;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
/**
* 对象流: java.io.ObjectOutputStream 和 java.io.ObjectInputStream
* 对象流是一对高级流,在流连接中的作用是进行对象的序列化(串行化)与反序列化,
* 方便我们进行java 对象的读写操作。
*
* 对象序列化: 将java 对象按照其结构转换为字节序列的过程
* 反序列化: 将字节序列还原为 java 对象的过程。
*
* @author YanLy
* @date 2021/5/31 14:02
*/
public class Test10_OOSDemo {
public static void main(String[] args) throws Exception {
String name = "海绵宝宝";
int age = 3;
String gender = "男";
String[] otherInfo = {"是一个厨师","住在海里的菠萝屋","乐观开朗"};
Person p = new Person(name,age,gender,otherInfo);
System.out.println(p);
/*
将一个Person实例写入person.obj文件中
*/
FileOutputStream fos = new FileOutputStream("person.obj");
ObjectOutputStream oos = new ObjectOutputStream(fos);
/*
void writeObject(Object obj)
对象输出流提供了一个写出对象的方法,但是在写出对象时要求该对象所属的类必须实现了接口:
java.io.Serializable,否则会抛出异常。
当我们调用writeObject()将一个对象写出时,对象流会将该对象按照其结构转换为一组字节,
这个过程称为 对象的序列化.
序列化后的字节再经过对象流连接的文件流写出.而文件流会将这些
字节最终写入到文件中(硬盘上)做长久保存,这个过程称为 数据持久化。
*/
oos.writeObject(p);
System.out.println("写出完毕");
oos.close();
}
}
package io;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.ObjectInputStream;
/**
* ObjectInputStream 对象输入流
* 用来读取一个java对象 -- 反序列化
*
* @author YanLy
* @date 2021/5/31 15:14
*/
public class Test11_OISDemo {
public static void main(String[] args) throws Exception {
// 将person.obj文件中的对象读取出来
FileInputStream fis = new FileInputStream("person.obj");
ObjectInputStream ois = new ObjectInputStream(fis);
Person p = (Person)ois.readObject();
System.out.println(p);
ois.close();
}
}