Solved

constructor while deserilizing object

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

Does constructor called while serializing object? please advise
0
Comment
Question by:gudii9
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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
Instantly Create Instructional Tutorials

Contextual Guidance at the moment of need helps your employees adopt to new software or processes instantly. Boost knowledge retention and employee engagement step-by-step with one easy solution.

 
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

Creating Instructional Tutorials  

For Any Use & On Any Platform

Contextual Guidance at the moment of need helps your employees/users adopt software o& achieve even the most complex tasks instantly. Boost knowledge retention, software adoption & employee engagement with easy solution.

Question has a verified solution.

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

Suggested Solutions

Introduction This article is the last of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article covers our test design approach and then goes through a simple test case example, how …
"Disruption" is the most feared word for C-level executives these days. They agonize over their industry being disturbed by another player - most likely by startups.
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.

738 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