Serialization - readObject writeObject overrides

After writing the code below, I have to use the custom override methods readObject () and writeObject () in StudentData to read and write object variables. Without using the defaultWriteObject or defaultReadObject methods for this.

The trouble is that I do not quite understand what they are asking me to do. I read Using readObject / writeObject in Serialization , but I cannot omit it in my head. Can someone point me in the right direction?

My code is:

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); } } } } 
+32
java serialization deserialization
Oct 18
source share
1 answer

You should do it like this:

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

ReadObject is called immediately after creating the Student instance (bypassing the regular constructor).

+55
Oct 18
source share
— -



All Articles