• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 75
  • Last Modified:

constructor while deserilizing object

Hi,

Does constructor called while serializing object? please advise
0
gudii9
Asked:
gudii9
  • 6
  • 5
  • 5
1 Solution
 
CPColinCommented:
Just like I said in your last question, try it.
1
 
krakatoaCommented:
What gives you that idea may we know?
0
 
gudii9Author Commented:
Looks no.
0
Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

 
CPColinCommented:
That's surprising. As I understand the Javadocs for Serializable, the first step of deserializing an object is to invoke whatever constructor it has that takes no parameters.
0
 
krakatoaCommented:
Which is not serialization of course.
0
 
krakatoaCommented:
Deserialisation I mean.
0
 
CPColinCommented:
Now I've just noticed the title of this question says "deserializing" and the body says "serializing." The constructor is called during the former and not the latter.
0
 
krakatoaCommented:
Exactly my point.
0
 
gudii9Author Commented:
any good working example on this concept(not API link) of not calling constructor in deserialization and calling constructor on serialization?
0
 
krakatoaCommented:
O please.
0
 
CPColinCommented:
Other way around. And no.
0
 
gudii9Author Commented:
Got it other way around. Calls constructor in deserialization while from file to object (which is bit odd to me initially but since file to java object calling constructor makes more sense now) and calls no constructor while serializing object to file. I saw below example but no mention of constructor call though
http://www.tutorialspoint.com/java/java_serialization.htm
0
 
CPColinCommented:
Try that example, but add a constructor to the Employee class that prints something. You'll see it print something during deserialization.
0
 
gudii9Author Commented:
sure will do that
0
 
gudii9Author Commented:
 import java.io.*;
public class DeserializeDemo
{
   public static void main(String [] args)
   {
      Employee e = null;
      try
      {
         FileInputStream fileIn = new FileInputStream("/employee.ser");
         ObjectInputStream in = new ObjectInputStream(fileIn);
         e = (Employee) in.readObject();
         in.close();
         fileIn.close();
      }catch(IOException i)
      {
         i.printStackTrace();
         return;
      }catch(ClassNotFoundException c)
      {
         System.out.println("Employee class not found");
         c.printStackTrace();
         return;
      }
      System.out.println("Deserialized Employee...");
      System.out.println("Name: " + e.name);
      System.out.println("Address: " + e.address);
      System.out.println("SSN: " + e.SSN);
      System.out.println("Number: " + e.number);
    }
}

Open in new window


import java.io.*;

public class SerializeDemo
{
   public static void main(String [] args)
   {
      Employee e = new Employee();
      e.name = "Reyan Ali";
      e.address = "Phokka Kuan, Ambehta Peer";
      e.SSN = 11122333;
      e.number = 101;
      
      try
      {
         FileOutputStream fileOut =
         new FileOutputStream("/employee.ser");
         ObjectOutputStream out = new ObjectOutputStream(fileOut);
         out.writeObject(e);
         out.close();
         fileOut.close();
         System.out.printf("Serialized data is saved in /tmp/employee.ser");
      }catch(IOException i)
      {
          i.printStackTrace();
      }
   }
}

Open in new window


public class Employee implements java.io.Serializable
{
   public String name;
   public String address;
   public transient int SSN;
   public int number;
   
   public void mailCheck()
   {
      System.out.println("Mailing a check to " + name + " " + address);
   }

public Employee() {

	System.out.println("for deserilize this constructor called");
}
   
}

Open in new window


when i run DeserializeDemo.java getting below error

java.io.FileNotFoundException: \employee.ser (The system cannot find the file specified)
      at java.io.FileInputStream.open0(Native Method)
      at java.io.FileInputStream.open(Unknown Source)
      at java.io.FileInputStream.<init>(Unknown Source)
      at java.io.FileInputStream.<init>(Unknown Source)
      at DeserializeDemo.main(DeserializeDemo.java:9)


i created employee.ser under root got similar error as above and moved to src still same error.

Please advise
serialized.png
0
 
CPColinCommented:
Did you run SerializeDemo first? It should create the file in a place that DeserializeDemo can read it. You could take the leading forward slash off of the filename, too (in both classes).
0

Featured Post

Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

  • 6
  • 5
  • 5
Tackle projects and never again get stuck behind a technical roadblock.
Join Now