Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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

// Deserializing using readUnshared
try(ObjectInputStream 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);//handle error
}

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. The checkTutees() method correctly returns true.

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

// Deserializing using readUnshared
try(ObjectInputStream 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);//handle error
} 

Applicability

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

...