出现异常的情况
在ObjectInputStream循环读取时,如果达到文件的末尾,没有对象可以读取,会抛出EOFExcetion
Exception in thread "main" java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:3016)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1575)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:464)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:422)
解决方法
1. 使用容器,在序列化时将此容器序列化到文件中
集合 or 数组
ArrayList<Entry> list = new ArrayList<>();
list.add(entry);
...
oos.writeObject(list);
oos.close;
Entry[] arr = new Entry[entry对象...];
oos.writeObject(arr);
oos.close;
2. 不想使用容器,需要给ois读取时一个标记
在ObjectOutputstream循环写出时,加入oos.ObjectWrite(null)
这个结束标记
// 循环写入
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("path"));
for (Student student : list) {
oos.writeObject(entry);
}
// tips: 使用序列化流判断用来是否到达结尾
oos.writeObject(null);
oos.close();
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("path"));
try {
Entry entry;
while ((entry= (Entry) ois.readObject()) != null) {
System.out.println(entry);
}
} catch (EOFException exception) {
// 捕获此异常
} finally {
ois.close();
}