序列化问题

时间:2014-01-17 15:25:34

标签: java serialization

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

这是否意味着我的序列化功能不正确或在反序列化时出现问题?

1 个答案:

答案 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中,数组也是对象。