对于今天第二篇关于序列化的文章,很抱歉,修复了一个问题导致了另一个问题。Java - 序列化 - EOFException问题
因为各国在这里 - Java - Serialization - NotSerializableException Issue - 我有一个项目有以下类
Student.java
StudentsCollection.java
学生创建我的学生对象(自我解释)和我的StudentsCollection()实例化一个存储我的Student对象的Student类型的列表,当试图保存/加载对象我用这个代码,并得到下面的异常抛出:
/**
* Open student collection
*/
public void openCollection(){
try {
FileInputStream e = new FileInputStream("students.ser");
ObjectInputStream inputSteam = new ObjectInputStream(e);
while(inputSteam.readObject() != null){
this.list.add((Students)inputSteam.readObject());
}
} catch (FileNotFoundException var3) {
var3.printStackTrace();
JOptionPane.showMessageDialog(null, "File not found");
} catch (IOException var4) {
var4.printStackTrace();
JOptionPane.showMessageDialog(null, "IO Exception");
} catch (ClassNotFoundException var5) {
var5.printStackTrace();
JOptionPane.showMessageDialog(null, "Required class not found");
}
}
,并投掷:
java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2598)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1318)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
at jdatabase.objects.students.StudentsCollection.openCollection(StudentsCollection.java:558)
at jdatabase.main.MainController.main(MainController.java:14)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
我只有一个Student对象添加到我的列表,保存列表之后,重新打开它,我要求控制台打印出列表,学生实际上会打印出来。但是,当我创建多个学生对象并每次将它们的ID增加1并添加它们时,控制台将打印它们全部,然后重新打印(出于某种奇怪的原因)并最终跳过几个。
如果您需要更多的代码,请询问。所述saveCollection()工作正常现在
订正代码: /**
* Open student collection
*/
public void openCollection(){
try {
FileInputStream e = new FileInputStream("students.ser");
ObjectInputStream inputSteam = new ObjectInputStream(e);
while((obj = inputSteam.readObject()) != null){
this.list.add((Students)obj);
}
} catch (FileNotFoundException var3) {
var3.printStackTrace();
JOptionPane.showMessageDialog(null, "File not found");
} catch (IOException var4) {
var4.printStackTrace();
JOptionPane.showMessageDialog(null, "IO Exception");
} catch (ClassNotFoundException var5) {
var5.printStackTrace();
JOptionPane.showMessageDialog(null, "Required class not found");
}
}
抛出:
java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2598)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1318)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
at jdatabase.objects.students.StudentsCollection.openCollection(StudentsCollection.java:559)
at jdatabase.main.MainController.main(MainController.java:13)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
仅具有1个学生对象和下面的印刷中控制台:
学生姓名:学生 学生姓:默认 学生ID:0学生 DOB:90年1月1日
并再次印刷:
学生姓名:学生 学生姓:默认 Student ID:0 Student DoB:1/1/90
啊..年岁的问题。你的答案现在非常有意义,确实是*正确*。 :-) – Juxhin