Serialización – ReadObject writeObject anula

Después de haber escrito el código a continuación, ahora tengo que usar los métodos de anulación personalizados readObject () y writeObject () en StudentData para leer y escribir las variables del objeto. Sin usar los métodos defaultWriteObject o defaultReadObject para hacer esto.

El problema es que no entiendo completamente lo que se me pide que haga. He leído Usos de readObject / writeObject en la serialización, pero no puedo entenderlo. ¿Puede alguien señalarme en la dirección correcta?

Mi código:

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); } } } } 

Tienes que hacerlo así:

 import java.io.IOException; class Student implements java.io.Serializable { String name; String DOB; int id; Student(String naam, int idno, String dob) { name = naam; id = idno; DOB = dob; } private void writeObject(java.io.ObjectOutputStream stream) throws IOException { stream.writeObject(name); stream.writeInt(id); stream.writeObject(DOB); } private void readObject(java.io.ObjectInputStream stream) throws IOException, ClassNotFoundException { name = (String) stream.readObject(); id = stream.readInt(); DOB = (String) stream.readObject(); } public String toString() { return name + "\t" + id + "\t" + DOB + "\t"; } } 

El readObject se invoca justo después de crear una instancia de Student (sin pasar por el constructor normal).