Solved

constructor while deserilizing object

Posted on 2016-08-05
16
57 Views
Last Modified: 2016-08-08
Hi,

Does constructor called while serializing object? please advise
0
Comment
Question by:gudii9
  • 6
  • 5
  • 5
16 Comments
 
LVL 14

Accepted Solution

by:
CPColin earned 500 total points
ID: 41744605
Just like I said in your last question, try it.
1
 
LVL 16

Expert Comment

by:krakatoa
ID: 41744630
What gives you that idea may we know?
0
 
LVL 7

Author Comment

by:gudii9
ID: 41744953
Looks no.
0
Master Your Team's Linux and Cloud Stack

Come see why top tech companies like Mailchimp and Media Temple use Linux Academy to build their employee training programs.

 
LVL 14

Expert Comment

by:CPColin
ID: 41746639
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
 
LVL 16

Expert Comment

by:krakatoa
ID: 41746774
Which is not serialization of course.
0
 
LVL 16

Expert Comment

by:krakatoa
ID: 41746791
Deserialisation I mean.
0
 
LVL 14

Expert Comment

by:CPColin
ID: 41747292
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
 
LVL 16

Expert Comment

by:krakatoa
ID: 41747414
Exactly my point.
0
 
LVL 7

Author Comment

by:gudii9
ID: 41747591
any good working example on this concept(not API link) of not calling constructor in deserialization and calling constructor on serialization?
0
 
LVL 16

Expert Comment

by:krakatoa
ID: 41747593
O please.
0
 
LVL 14

Expert Comment

by:CPColin
ID: 41747595
Other way around. And no.
0
 
LVL 7

Author Comment

by:gudii9
ID: 41747605
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
 
LVL 14

Expert Comment

by:CPColin
ID: 41747609
Try that example, but add a constructor to the Employee class that prints something. You'll see it print something during deserialization.
0
 
LVL 7

Author Comment

by:gudii9
ID: 41747612
sure will do that
0
 
LVL 7

Author Comment

by:gudii9
ID: 41747679
 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
 
LVL 14

Expert Comment

by:CPColin
ID: 41747688
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

Master Your Team's Linux and Cloud Stack!

The average business loses $13.5M per year to ineffective training (per 1,000 employees). Keep ahead of the competition and combine in-person quality with online cost and flexibility by training with Linux Academy.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
ejb wildfly example 2 28
JAVA API design with micro service cloud in mind 1 49
Html Table Looping (part 2) 5 28
swing controls 2 16
Having just graduated from college and entered the workforce, I don’t find myself always using the tools and programs I grew accustomed to over the past four years. However, there is one program I continually find myself reverting back to…R.   So …
The purpose of this article is to demonstrate how we can use conditional statements using Python.
This video teaches viewers about errors in exception handling.
The viewer will learn how to user default arguments when defining functions. This method of defining functions will be contrasted with the non-default-argument of defining functions.

821 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question