Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Basics of Serialization in java not understood

I am not able to understand the basics of Serialization in Java 1.6.

Below is the Dog Class containing an instance variable of Collar Class:

Dog.java

public class Dog implements Serializable {

private Collar collar;

public Collar getCollar() {
    return collar;
}

public void setCollar(Collar collar) {
    this.collar = collar;
}

}

The Collar class does not implements Serializable interface as shown below:

Collar.java

public class Collar {

private int size;

public int getSize() {
    return size;
}

public void setSize(int size) {
    this.size = size;
}

}

Now when I try to serialize the Dog then why it does not throw an NotSerializableException ? According to the contract the entire object graph should implement Serializable but my Collar class does not fulfill that.

Below is the main method for this demo:

public static void main(String[] args) {
    try {
        FileOutputStream fs = new FileOutputStream("E:\\test.ser");
        ObjectOutputStream os = new ObjectOutputStream(fs);
        Dog dog = new Dog();
        // No exception thrown here, WHY?
        // test.ser file is getting created properly.
        os.writeObject(dog);

        FileInputStream fis = new FileInputStream("E:\\test.ser");
        ObjectInputStream ois = new ObjectInputStream(fis);
        Dog dog1 = (Dog)ois.readObject();
        // Here I am getting a null Collar object
        Collar c1 = dog1.getCollar();

Kindly explain this, I am totally confused while trying to implement all the theoretical stuffs :(

like image 653
WhoAmI Avatar asked Dec 21 '22 01:12

WhoAmI


1 Answers

Could be because your dog doesn't have a collar!

Try with

Dog dog = new Dog();
dog.setCollar(new Collar());
like image 140
adarshr Avatar answered Jan 01 '23 16:01

adarshr