【问题标题】:Serializing a list of objects序列化对象列表
【发布时间】:2014-12-22 06:26:24
【问题描述】:

我对如何序列化和反序列化问题对象列表感到困惑。

我有一个 Survey 类,它有一个名为 Questions 的属性,它是 Question 对象的列表。

我希望能够序列化调查属性以及每个问题的所有属性。

不幸的是,到目前为止我没有运气,这就是我所拥有的。感谢您的帮助!

public void loadData(Boolean isSurvey) throws FileNotFoundException {
    System.out.println("Select a file: ");
    FileInputStream fileIn;

    if (isSurvey) {
        String fileName = listFiles("surveys").get(input.getIntInput(fileCount - 1));
        fileIn = new FileInputStream("surveys/" + fileName);
    } else {
        String fileName = listFiles("tests").get(input.getIntInput(fileCount - 1));
        fileIn = new FileInputStream("tests/" + fileName);
    }

    Question q = null;
    try
    {
        ObjectInputStream in = new ObjectInputStream(fileIn);
        q = (Question) in.readObject();
        in.close();
        fileIn.close();
    }catch(IOException i){
        i.printStackTrace();
    }catch(ClassNotFoundException c) {
        System.out.println("Not found");
        c.printStackTrace();
    }
    System.out.println("Deserialized Question...");
    System.out.println("prompt: " + q.prompt);
}

public void saveData(Survey survey, Test test, Boolean isSurvey, String fileName) {
    try {
        File surveyDir = new File("surveys");
        File testDir = new File("tests");

        if ((!(surveyDir.exists()) && isSurvey)) {
            System.out.println("Creating Survey directory. . .");
            surveyDir.mkdir();
        }
        if ((!(testDir.exists())) && !(isSurvey)) {
            System.out.println("Creating Test directory. . .");
            testDir.mkdir();
        }

        if (isSurvey) {
            FileOutputStream fileOut = new FileOutputStream("surveys/" + fileName);
            ObjectOutputStream out = new ObjectOutputStream(fileOut);

            for (Question question : survey.questions) {
                out.writeObject(survey.questions);
            }
            out.close();
            fileOut.close();
        } else {
            FileOutputStream fileOut = new FileOutputStream("tests/" + fileName);
            ObjectOutputStream out = new ObjectOutputStream(fileOut);

            for (Question question : test.questions) {
                out.writeObject(question);
            }
            out.close();
            fileOut.close();
        }


    } catch(IOException i) {
        i.printStackTrace();
    }
}

【问题讨论】:

标签: java serialization


【解决方案1】:

您是否已经实现了要使用 java.io.Serializable

编写的对象
import java.io.Serializable;
public class Question implements Serializable {

    //Other codes here

}

我注意到的另一件事是您编写了一个集合对象。

for (Question question : survey.questions) {
    out.writeObject(survey.questions);
}

但您将其作为 Question 对象阅读。

q = (Question) in.readObject();

如果你写的对象是一个集合。这是一个示例,如果它是 List 集合

q = (List<Question>) in.readObject();

【讨论】:

  • 不幸的是,我在发布时已经实现了它。不过谢谢:(
  • survey.questions 是什么类型的集合。由于 Collection 类已经实现了 Serializable,因此您可以直接转换它。
  • survey.questions 是ArrayList&lt;Question&gt; questions = new ArrayList&lt;Question&gt;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-24
  • 1970-01-01
  • 2014-12-10
  • 2020-10-31
相关资源
最近更新 更多