readObject(),读到末尾了并不会返回空(null),如果读到末尾还继续读就会报错(EOFException),那么怎么解决呢?
方法一:直接try-catch捕获这个异常,然后进行相应的操作。
方法二:把这些对象存到集合中,然后再把这个集合写到要序列化的对象中。
方法二代码:
测试类:
package myio;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.ArrayList;
public class ObjectStreamTest2 {
public static void main(String[] args) throws IOException, ClassNotFoundException {
//序列化对象
Student stu1 = new Student("张三",20);
Student stu2 = new Student("李四",21);
Student stu3 = new Student("王麻子",20);
ArrayList<Student> arrayList = new ArrayList<>();
arrayList.add(stu1);
arrayList.add(stu2);
arrayList.add(stu3);
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("a.txt"));
oos.writeObject(arrayList);
oos.close();
//反序列化对象
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("a.txt"));
ArrayList<Student> arrayList = (ArrayList) (ois.readObject());
for (Student stu : arrayList) {
System.out.println(stu);
}
ois.close();
}
}
学生类:
package myio;
import java.io.Serializable;
public class Student implements Serializable {
private static final long serialVersionUID = -6696663331095681944L;
private String name;
private int age;
private String address;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", address='" + address + '\'' +
'}';
}
}