对象流
对象需要实现Serializable接口
package com.nocilantro.对象流Demo;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
/**
* 使用ObjectOutputStream => 序列化
* 要求序列化的类必须要实现Serializable接口
* 序列化的类中的对象属性也要实现Serializable接口
* serialVersionUID,保证序列化的类和反序列化的类是同一个类。更改后需要重新序列化。
* 使用transient关键词使类的属性不可序列化
* 静态属性也不能序列化
* 想要序列化多个对象可以把多个对象写入一个集合中,然后序列化这个集合
*/
public class Demo01 {
public static void main(String[] args) throws Exception{
FileOutputStream fos = new FileOutputStream("stu.bin");
ObjectOutputStream oos = new ObjectOutputStream(fos);
Student student = new Student("leo", 20);
oos.writeObject(student);
oos.close();
System.out.println("Over");
}
}
package com.nocilantro.对象流Demo;
import java.io.FileInputStream;
import java.io.ObjectInputStream;
public class Demo02 {
public static void main(String[] args) throws Exception{
FileInputStream fis = new FileInputStream("stu.bin");
ObjectInputStream ois = new ObjectInputStream(fis);
// 读取文件 (反序列化)
Student student = (Student)ois.readObject();
// Student student2 = (Student)ois.readObject(); // java.io.EOFException
ois.close();
System.out.println("Over");
System.out.println(student.toString());
}
}
package com.nocilantro.对象流Demo;
import java.io.Serializable;
public class Student implements Serializable {
private static final long serialVersionUID = 100L; //
private String name;
private transient int age;
public Student(String name, int age) {
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;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}