序列化 - 读取对象写入对象重写
2022-09-01 05:04:22
						写完下面的代码后,我现在必须在学生数据中使用自定义的readObject()和writeObject()覆盖方法来读取和写入对象的变量。不使用 defaultWriteObject 或 defaultReadObject 方法来执行此操作。
问题是我不完全理解我被要求做什么。我已经阅读了序列化中读取对象/写入对象的用法,但我无法理解它。有人能给我指出正确的方向吗?
我的代码:
import java.io.*; //importing input-output files
class Student implements java.io.Serializable {
    String name; // declaration of variables
    String DOB;
    int id;
    Student(String naam, int idno, String dob) // Initialising variables to user
                                                // data
    {
        name = naam;
        id = idno;
        DOB = dob;
    }
    public String toString() {
        return name + "\t" + id + "\t" + DOB + "\t";
    }
}
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
class StudentData                     //main class
{
    public static void main(String args[]) throws IOException                  //exception handling
    {
        System.out.println("Enter the numbers of students:");
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(in.readLine());
        Student[]  students = new Student[n];
        //Student[]  S=new Student[n];                      // array of objects declared and defined
        for (int i = 0; i < students.length; i++) {
            System.out.println("Enter the Details of Student no: " + (i + 1));             //reading data form the user
            System.out.println("Name: ");
            String naam = in.readLine();
            System.out.println("ID no: ");
            int idno = Integer.parseInt(in.readLine());
            System.out.println("DOB: ");               
            String dob = (in.readLine());
            students[i] = new Student(naam, idno, dob);                          
            File studentFile = new File("StudentData.txt");
            try {
                FileOutputStream fileOutput = new FileOutputStream(studentFile);
                ObjectOutputStream objectOutput = new ObjectOutputStream(fileOutput);
                objectOutput.writeObject(students);
                students = null;
                FileInputStream fileInput = new FileInputStream(studentFile);
                ObjectInputStream objectInputStream = new ObjectInputStream(fileInput);
                students = (Student[]) objectInputStream.readObject();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
            for (Student student : students) {
                System.out.println(student);
            }
        }
    }
}