繁体   English   中英

Java 可序列化(加载 Object 并打印)

[英]Java Serializable (load Object and print)

我怎样才能让主 class 在这里启动并运行?

我希望显示音符和频率。

因为 mapgradeCount 是瞬态的,所以我必须在 Load 方法中重新创建它。 我该怎么做?

任务是:

实现缺少的加载方法以匹配保存方法。 注意:gradeCount 属性是瞬态的,所以不保存。 忘记因此在加载时不要重新计算gradeCount 的值。

我已经开始编写加载方法,但无法进一步。

第一个 class:

public class Exam implements Serializable {

private List <StudentGrade> grades = new ArrayList<>();

private transient Map <Integer, Integer> gradeCount;

public List<StudentGrade> getGrades() {
    return grades;
}

public void setGrades(List<StudentGrade> grades) {
    this.grades = grades;
}

public Map<Integer, Integer> getGradeCount() {
    return gradeCount;
}

public void setGradeCount(Map<Integer, Integer> gradeCount) {
    this.gradeCount = gradeCount;
}

public static void save(String string, Exam exam) {
    // TODO Auto-generated method stub

}

public static Exam load(String string) {
        // TODO Auto-generated method stub
        return null;
    }
 }

第二个 class:

public class StudentGrade implements Serializable {


private String student;
public String getStudent() {
    return student;
}

public void setStudent(String student) {
    this.student = student;
}

public int getGrade() {
    return grade;
}

public void setGrade(int grade) {
    this.grade = grade;
}

private int grade;

public StudentGrade (String student, int grade) {
    super();
    this.student = student;
    this.grade = grade;
}

}

主class:

public class Main {

    public static void main(String[] args) throws ClassNotFoundException, IOException {

        Exam exam = new Exam();

        exam.getGrades().add(new StudentGrade("Alice", 230)); // 2,3
        exam.getGrades().add(new StudentGrade("Bob", 170)); // 1,7
        exam.getGrades().add(new StudentGrade("Charlie", 300)); // 3,0
        exam.getGrades().add(new StudentGrade("Dennis", 330));// 3,3
        exam.getGrades().add(new StudentGrade("Edith", 170)); // 1,7

        Exam.save("exam.ser", exam);
        exam = Exam.load("exam.ser");
        System.out.println(exam.getGradeCount());

    }

    public static void save (String filename, Exam exam) throws IOException{
        try (ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(filename)))){
            out.writeObject(exam);
        }
    }

    public static Exam load (String filename) throws IOException, ClassNotFoundException{

        Map <Integer, Integer> gradeCount;

            ObjectInputStream ois = new ObjectInputStream(new FileInputStream(filename));
            Exam exam = new Exam ();
            exam = (Exam) ois.readObject();

            ois.close();

            return exam;

    }

}

对于那些有同样问题的人:

    public static Exam load(String filename) throws IOException, ClassNotFoundException {

        Exam result = null;
        try (ObjectInputStream ois = new ObjectInputStream(new BufferedInputStream(new FileInputStream(filename)))) {
            result = (Exam) ois.readObject();
        }
        if (result != null) {
            result.setGradeCount(new HashMap<>());
            for (StudentGrade grade : result.getGrades()) {
                Integer count = result.getGradeCount().get(grade.getGrade());
                if (count == null) {
                    count = 1;
                } else {
                    count++;
                }
                result.getGradeCount().put(grade.getGrade(), count);
            }
        }
        return result;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM