Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: added try-with-resources

...

Code Block
bgColor#FFcccc
String filename = "serial";
ObjectOutputStream oos = null;
try {
  // Serializing using writeUnshared
  try(ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filename));
  oos.writeUnshared(jane);
} catch (Exception e) {
  System.out.println("Exception during serialization" + e);
} finally {
  try {// Serializing using writeUnshared
    oos.closewriteUnshared(jane);
  } catch (IOExceptionException e) {
  	  System.out.println("Exception during serialization" + e);
  }
}

// Deserializing using readUnshared
try(ObjectInputStream ois= null;
try {
  ois = new ObjectInputStream(new FileInputStream(filename));){
  	Professor jane2 = (Professor)ois.readUnshared();

  	System.out.println("checkTutees returns: " +
                     							 jane2.checkTutees());
}  
catch (Exception e) {
	  System.out.println("Exception during deserialization" + e);
} finally {
  try {
    ois.close();
  } catch (IOException e) {
    System.out.println("Exception during deserialization" + e);
  }
}

Compliant Solution

This compliant solution overcomes the problem of the noncompliant code example by using writeObject() and readObject(), ensuring that the tutor object referred to by the three students has a one-to-one mapping with the original Professor object.  So the checkTutees() method correctly returns true.

Code Block
bgColor#ccccff
String filename = "serial";
ObjectOutputStream oos = null;
try {
  // Serializing using writeUnshared
 try(ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filename));
  oos.writeObject(jane);
} catch (Exception e) {
	//  System.out.println("Exception during serialization" + e);
} finally {
  try {
    oos.close();
  } catch (IOExceptionSerializing using writeUnshared
	oos.writeObject(jane);
} 
catch (Exception e) {
    	System.out.println("Exception during serialization" + e);
  } 
}

// Deserializing using readUnshared
try(ObjectInputStream ois= null;
try {
  ois = new ObjectInputStream(new FileInputStream(filename))); {
  Professor jane2 = (Professor)ois.readObject();

  System.out.println("checkTutees returns: " +
                     					 jane2.checkTutees());
}  
catch (Exception e) {
	  System.out.println("Exception during deserialization" + e);
} finally {
  try {
    ois.close();
  } catch (IOException e) {
    System.out.println("Exception during deserialization" + e);
  }
}

Applicability

Using the writeUnshared() and readUnshared() methods may produce unexpected results.

...