序列化
一个类必须实现了Serializable 接口,其对象才能序列化,Serializable接口没有方法或字段,仅用于标识可序列化的语义
ObjectOutputStream
对象输出流.通过使用流中的文件可以实现对象的持久存储.
1.构造器
ObjectOutputStream(OutputStream out) //传入一个文件流,用于存储对象
2.主要方法
public final void writeObject(Object obj) throws IOException
当 OutputStream 中出现问题或者遇到不应序列化的类时,将抛出异常。
ObjectInputStream
对ObjectOutputStream写入的数据和对象进行反序列,恢复以前那些以前序列的对象
1.构造器
public ObjectInputStream(InputStream in)throws IOException //创建从指定 InputStream 读取的 ObjectInputStream。
2.主要方法
public final Object readObject() throws IOException,ClassNotFoundException //从 ObjectInputStream 读取对象
当 InputStream 中出现问题或者遇到不应反序列化的类时,将抛出异常。
代码实现
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Scanner;
public class FileTest {
public static void main(String[] args) {
System.out.println("教师的基本信息录入");
Scanner scanner=new Scanner(System.in);
System.out.println("请输入姓名:");
String name = scanner.next();
System.out.println("请输入年龄:");
int age = scanner.nextInt();
System.out.println("请输入工号:");
String tno = scanner.next();
System.out.println("请输入工资:");
float salary = scanner.nextFloat();
Teacher teacher=new Teacher(name, age, tno, salary);
//1.将该对象保存到文件中
try {
FileOutputStream fileOutputStream=new FileOutputStream("my.dat");
ObjectOutputStream outobj=new ObjectOutputStream(fileOutputStream);
outobj.writeObject(teacher);
outobj.close();
} catch (Exception e) {
e.printStackTrace();
}
//2.读取文件
try {
FileInputStream file=new FileInputStream("my.dat");
ObjectInputStream inobj=new ObjectInputStream(file);
Teacher t1=(Teacher) inobj.readObject();
System.out.println(t1.toString());
inobj.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Person implements Serializable{
private String name;
private int age;
public Person(String name, int age) {
super();
this.name = name;
this.age = 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;
}
}
class Teacher extends Person implements Serializable{
private String tno; //工号
private float salary;//工资
public Teacher(String name, int age,String tno, float salary) {
super(name, age);
this.tno = tno;
this.salary = salary;
}
public String getTno() {
return tno;
}
public void setTno(String tno) {
this.tno = tno;
}
public float getSalary() {
return salary;
}
public void setSalary(float salary) {
this.salary = salary;
}
@Override
public String toString() {
return "Teacher [tno=" + tno + ", salary=" + salary + ",name="
+ super.getName() + ",age=" + super.getAge() + "]";
}
}