public void writeObject(String outFile) {
try {
FileOutputStream fos = new FileOutputStream(outFile);
ObjectOutputStream oos = new ObjectOutputStream(fos);
Student[] copy = this.getStudents();
for (Student st : copy){
oos.writeObject(st);}
oos.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
上面的代码是我用来序列化我的存储库内容的函数,getStudens()
正在返回我的数据数组。
public void readSerialized(String fileName) throws Exception {
FileInputStream fis = new FileInputStream(fileName);
ObjectInputStream ois = new ObjectInputStream(fis);
while(fis.available()>0){
ctrl.addC((Student) ois.readObject());}
ois.close();
}
这是我的反序列化函数,它应该重新创建我的数据并在我的存储库中再次添加它。问题是,当我首先序列化它时,它不会重新创建我在存储库中的数据。 我在序列化之前在存储库中拥有的内容:
1 a 4.0 6.0
2 b 10.0 10.0
3 c 2.0 2.0
4 d 8.0 2.0
5 e 6.0 2.0
反序列化返回的内容:
0 3.0
0 5.0
这是否意味着我的序列化功能不正确或在反序列化时出现问题?
答案 0 :(得分:0)
你的代码是不必要的复杂,使用available()总是让我感到困惑。这意味着你可以在没有系统调用的情况下阅读 并不意味着什么都没有。
我建议只是序列化数组。
FileOutputStream fos = new FileOutputStream(outFile);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(this.getStudents());
oos.close();
FileInputStream fis = new FileInputStream(fileName);
ObjectInputStream ois = new ObjectInputStream(fis);
Student[] copy = (Student[]) ois.readObject();
ois.close();
在Java中,数组也是对象。