When I run below program, I am getting exception as
java.io.InvalidClassException: Files.SerializationMain; Files.SerializationMain; no valid constructor at java.io.ObjectStreamClass.checkDeserialize(Unknown Source) at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source) at java.io.ObjectInputStream.readObject0(Unknown Source) at java.io.ObjectInputStream.readObject(Unknown Source) at Files.SerializationClass.main(SerializationClass.java:71) Caused by: java.io.InvalidClassException: Files.SerializationMain; no valid constructor at java.io.ObjectStreamClass.<init>(Unknown Source) at java.io.ObjectStreamClass.lookup(Unknown Source) at java.io.ObjectOutputStream.writeObject0(Unknown Source) at java.io.ObjectOutputStream.writeObject(Unknown Source) at Files.SerializationClass.main(SerializationClass.java:61)
I read somewhere that when we serialize any child class then its base class constructor gets fired.
class Parent123 { int age; String name; Parent123(int age,String name) { System.out.println("We are in Parent123 Constructor"); this.age=age; this.name=name; } } class SerializationMain extends Parent123 implements Serializable { int data1; String data2; SerializationMain(int data1,String data2) { super(20,"test"); this.data1=data1; this.data2=data2; } public void setData1(int data1) { this.data1=data1; } public void setData2(String data2) { this.data2=data2; } public String getData2() { return data2; } public int getData1() { return data1; } } public class SerializationClass { public static void main(String args[]) { System.out.println("Before Creating Object"); SerializationMain s1=new SerializationMain(10,"Anurag"); try { System.out.println("Serializing Object"); FileOutputStream fis=new FileOutputStream("Test.ser"); ObjectOutputStream ois=new ObjectOutputStream(fis); ois.writeObject(s1); } catch(Exception e1) { e1.printStackTrace(); } try { FileInputStream fis=new FileInputStream("Test.ser"); ObjectInputStream ois=new ObjectInputStream(fis); Object o1=ois.readObject(); SerializationMain s2=(SerializationMain)o1; } catch(Exception e1) { e1.printStackTrace(); } } }//End of SerializationClass
Add implementation of Serializable to parent class.
Just provide default constructor in both classes (Parent & Child)
During deserialization, the fields of non-serializable classes will be initialized using the public or protected no-arg constructor of the class. A no-arg constructor must be accessible to the subclass that is serializable. The fields of serializable subclasses will be restored from the stream. more
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With